解耦:抽象与封装
“先解耦,再分解”是分离架构组件的不二法门。解耦是分解的前提
在组件级别应用抽象和封装,可用于指导组件的解耦。
1. 解耦目标
- 不耦合
- 空间上不耦合
- 时间上不耦合
- 单向耦合
- 短耦合
- 窄耦合
- 控制耦合方向
2. 抽象
如果类A依赖于类B:
- 根据类A的需求对类B抽象出接口(或抽象类)C
- 类A使用C,而类B实现/继承C
- 将类A和C聚合到一个组件X中,而将B分离到另一个组件Y中
- 结果:A不再依赖B, A所在的组件X不依赖B所在的组件Y。
- 结果:隔绝了A对B的直接依赖和一大批间接依赖(B所依赖的类)
3. 封装
通过封装解除客户端对服务端的耦合。
以封装领域层为例,创建一个门面层来封装领域模型:
- 在门面层定义适合自己需求的数据类和服务类
- 服务类负责在门面层的数据类和领域层中的实体类之间进行双向转换
- 服务类封装了领域层的数据和机制,解耦了客户端对领域层的耦合