知识卡片
整洁架构:综合多种架构思想的五个共同特征与依赖关系规则
内容
六边形架构(端口与适配器,Cockburn提出)、DCI架构(Coplien与Reenskaug提出)、BCE架构(Jacobson提出)这些看似不同的架构思想,细节各异但目标高度一致:都按关注点把软件切成不同的层,至少有一层只包含纯粹的业务逻辑,用户接口和系统接口都归属于其他层。按这类架构设计出的系统通常共享五个特点:独立于框架(框架只是工具,系统不必迁就框架的某个特定功能)、可测试(业务逻辑能脱离UI、数据库、Web服务等外部元素测试)、独立于UI(UI可以从Web界面换成命令行界面而无需改动业务逻辑)、独立于数据库(可以在Oracle/SQL Server和Mongo/BigTable/CouchDB之间自由切换,因为业务逻辑早已和数据库解耦)、独立于任何外部机构(业务逻辑不需要知道任何外部接口的存在)。整洁架构用一组同心圆把这些理念综合成一个统一表述:圆越靠近中心,所在软件层次越高——外层圆代表机制,内层圆代表策略。贯穿整个设计的核心是依赖关系规则:源码依赖必须只指向同心圆内层,即由低层机制指向高层策略——内层代码不应引用外层代码声明的任何名字(函数/类/变量),外层框架生成的数据格式也不该被内层代码使用,外层圆发生的任何变更都不该影响内层圆。图中虽然只画了四层,但这只是为了说明结构,实际架构层数不受限制,真正不变的是这条依赖方向规则:越往内抽象和策略层次越高,最内层是最通用最高层的策略,最外层是最具体的实现细节。
结构图:
flowchart TD
subgraph 整洁架构同心圆_由外向内
F[框架与驱动程序: Web/数据库/工具,最外层机制]
I[接口适配器: 控制器/展示器/网关,数据转换层]
U[用例: 特定应用场景的业务逻辑]
E[业务实体: 最通用最高层业务逻辑,最内层策略]
end
F -->|源码依赖只能指向内层| I
I -->|源码依赖只能指向内层| U
U -->|源码依赖只能指向内层| E
参考来源
- 位置:《架构整洁之道》第22章《整洁架构》引言"依赖关系规则""只有四层吗"(源文件:_epub-src/text/part0014_split_007.html)
- 结论依据:原文列举六边形/DCI/BCE架构的共同设计目标与独立于框架/可测试/独立于UI/独立于数据库/独立于外部机构五个共同特点,给出同心圆的依赖关系规则(源码依赖只能指向内层),并说明四层只是示意、真正不变的是依赖方向规则,直接支撑本卡片的结构图与解释。
- 原始内容:这些架构在细节上各有不同,但总体来说是非常相似的……独立于框架……可被测试……独立于UI……独立于数据库……独立于任何外部机构……源码中的依赖关系必须只指向同心圆的内层,即由低层机制指向高层策略。