最早的《The Clean Architecture》诞生于 2012年,这个问题很早就被讨论清楚了。

思维导图:

思维导图

整洁架构抽象

注意,所有的接口都是在高层声明的:UseCase Input Port 和 UseCase Output port,所以高层可以实现高层的接口,低层也可以实现高层的接口。

注意,sofa的分层就是在一个横向的模块里声明了业务用例的接口和 core-model 的接口,这样源代码级的依赖都集中在抽象上

sofa-的分层
一个常见的跨越内部边界的例子

Use Case Interactor 和 Presenter 应该是可测试的,而 Data Access Interface、View、ORM 应该是 humble object。所以一个应用的低层(外层)应该是被排除掉不做测试的。

附件下载:

xmind

关于源代码中的依赖关系的一些澄清

“使用”并不意味着“定义”,而只是引用

dashed outline 代表虚线框,也代表抽象。

利用抽象工厂来管理依赖关系
组件聚合原则的张力图
组件间的关系都是单向的
常见的边界程序
妥善分类的出租车问题
HAL分层
以角色聚合的用例分析
四种功能划分的组件依赖图-跨越边界必单向
四种架构风格其实是等同的
带有访问修饰符的类型被虚化了