这篇我们将介绍这本书最核心的概念 - 干净构架。
首先一个干净的构架应该拥有以下几点特征:
- 不依赖于任何框架,数据库,UI,服务器
- 在没有UI,数据库,服务器的情况下可以测试
1 | Source code dependencies must point only inward, toward higher-level policies. |
在这个图中,在圈靠外的模块应该依赖于内部的模块。
Entities (实体)
实体包含着最核心的业务逻辑。它不应该由于外部的改动而变化。
Use Case (用例)
用例会直接使用和控制实体。它满足着系统主要的功能。
Interface Adapters (接口适配器)
接口适配器的主要工作是连接业务逻辑模块和外部的细节模块,它把数据转化为便于两者使用的模型。例如: 把SQL数据库的数据提取出来转化为用例可以使用的结构, 并且将用例返回的数据转化为便于UI显示的结构。
Frameworks And Drivers (框架和引擎)
这是干净构架中最靠外的部分。一个干净的构架应该让自己业务逻辑完全不依赖于这些工具。这样,当一些工具无法满足这个系统的需求的时候,我们可以轻易的更换这些工具。
跨越界限
大多情况下,在跨越界限的时候,控制的方向都是向内的,例如UI控制接口适配器,接口适配器调用用例,用例再操作实体。但是我们要通过依赖倒置原则来保证代码的依赖是外的。
跨越界限的数据
跨越界限的数据,其结构一定要越简单越好。并且这个数据结构的定义应该居住在靠内的模块中。
例子
注意在以下例子中,所有跨越边界的依赖都是向内的。