The Clean Architecture概述图
上图为Robert C. Martin对The Clean Architecture的描述图
1. The Clean Architecture是方法论,而非具体
当我们说架构的时候,很多人会下意识的想到类似单体架构,微服务,或是Spring全家桶等架构的模式。
The Clean Architecture与上述完全不相关,它是一种方法论。也就是:
- 它不与具体的语言,框架相关联
- 它不与具体的技术方向相关联
1.1 不与语言,框架关联
需要牢记在心,并不是Java才能应用这个架构,事实上,The Clean Architecture适合于所有语言,就笔者用过的几个语言,Java,TypeScript,Kotlin,Swift等,均可以使用上述The Clean Architecture
所以,理所当然的,它更不会与具体的技术框架相关联。事实上,技术是实现细节,这个在图中的环型的层中的最外层,也就是The Clean Architecture认为它是最不重要的一层。
无论你用的是哪种技术框架,比如是用关系型数据库或是非关系型数据库,JPA或Mybatis,甚至于传统模式的编程及响应式编程等,都可以也应该把整洁架构应用上
1.2 不与具体的技术方向相关联
当我们说架构这个词的时候,很容易让人联想到这只是架构师的事,而架构师这个专有名词通常是应用于后台,后台当前主流是以Java系为主。很多人会想当然的认为,架构的东西只与后台关联。
这是一个极大的误解
事实上,在笔者只从事后端方向开发的时候,也是这样想当然的。但当笔者近些年,陆续主导Android,iOS以及前端React,TypeScript等项目开发的时候,才慢慢的理解这是错误的理解
整洁架构事实上可以适应也应该适应于所有方向,特别是前端,移动端等,这些方向的技术人员通常对架构更缺少全局观,更容易陷入技术细节中去。
后续笔者会继续论述如何在前端或移动端应用类似整洁架构及领域驱动风格的设计
2. The Clean Architecture的基本特征
如果你能理解或明白上述笔者所说的整洁架构是与语言,框架,技术方向无关的,那接下来的基于特征就更进一步说明了这一点。
Robert C. Martin论述了他所认为的The Clean Architecture具备的几个基本特征
- 与具体的技术框架无关
- 可测试的,并且不受UI,数据库,第三方服务等外部影响
- 与UI无关的
- 不依赖第三方服务,与它们解耦
从上述的基于特征也可以进一步论证,The Clean Architecture是与语言,框架,技术方向无关的。事实上也是,不管你从事哪方面的开发,上述原则都应该是你在编码开发过程应该参考的基本原则,它同时也是可维护性的基本保证,做不到上述几个原则,你的代码的就如空中阁楼,不可能有维护性可言
事实上,这也恰恰是我们大多数程序员不关注的地方。很多程序员会下意识的问:有什么必要隔离具体的技术?Hibernate,压根不会换
这是非常不成熟的表现。后续笔者会慢慢论述为什么这种想法是非常幼稚与不成熟的
3. The Clean Architecture的分层及依赖原则
3.1 The Clean Architecture的分层
从图所示可以看出,The Clean Architecture大致上可以分为以下几个层
- Entities
- Use Cases
- Interface Adapters
- Frameworks and Drivers.
当然,这只是一个概述,事实上,根据项目不同,你可以在这其中添加其它层。
后续笔者再来论述这几个层,在这之前,先明确一个黄金原则,也就是依赖原则
3.2 The Clean Architecture的黄金原则
在讲述其它原则之前,有一个必须要明确的原则: The Clean Architecture的依赖原则
依赖是由外向内的,也就是外层知道并依赖内层,内层不知道也完全不能调用外层
这是黄金法则,需要一再强调。
在这个架构中,具体的技术,框架。比如数据库,网络框架等,是在最外层的。也就意味着你的项目中,核心业务不能调用知道任何与类似JPA或Hibernate的API调用。
很多人会问,怎么做到?
后续笔者再慢慢道来。