最早的《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分层 以角色聚合的用例分析 四种功能划分的组件依赖图-跨越边界必单向 四种架构风格其实是等同的 带有访问修饰符的类型被虚化了