干净的构架 - Clean Architecture Part 9

这篇我们将介绍这本书最核心的概念 - 干净构架。

首先一个干净的构架应该拥有以下几点特征:

  • 不依赖于任何框架,数据库,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控制接口适配器接口适配器调用用例用例再操作实体。但是我们要通过依赖倒置原则来保证代码的依赖是外的

跨越界限的数据


跨越界限的数据,其结构一定要越简单越好。并且这个数据结构的定义应该居住在靠内的模块中。

例子

注意在以下例子中,所有跨越边界的依赖都是向内的。