组件构建原则
组件
组件是软件的部署单元,是可以独立完成部署的最小实体
- 独立部署
- 独立开发
组件聚合
- 关注如何构建组件本身
REP:复用/发布等同原则
组件中的模块和类之间应该有一个共同的主题或者大方向
CCP:共同闭包原则
应将那些会为了一个目的而同时修改的模块与类放到一个组件中
CCP是SRP的组件版
CRP:共同复用原则
将经常共同复用的模块与类放在同一组件中
- 不依赖不需要用到的东西
ISP的组件版
组件耦合
- 关注组件之间的关系
ADP:无依赖环原则
组件不应该出现循环依赖
每周构建:所有人在同一个代码库中开发所有模块的代码,将一周的前几天用来开发新代码,最后一天进行模块依赖冲突的解决
为了避免循环依赖,可以通过划分独立组件进行独立开发及发布,在物理上强制隔离掉
为了消除循环依赖,有两种方法:
- 依赖反转改变组件的依赖方向
- 将相互依赖的模块提取到一个新模块
_抖动_:随着项目的开发,组件结构会不断扩张变化
自上而下的设计
组件结构图更像是构建性与维护性方面的地图,组件结构图一个重要的目标是如何隔离频繁的组件变更
组件的依赖关系是随着项目的逻辑设计而演进的,无法一开始就设计出完美的组件结构图
组件的依赖关系会随着架构的演进在不断变化
SDP:稳定依赖原则
一个组件只能依赖于比他更稳定的组件
稳定性
与依赖于该模块的模块数量成正比
- 越上层的组件越不稳定
不稳定性 = 依赖的组件数 / (依赖的组件数 + 依赖其的组件数)
抽象组件
- 比如只存放接口的包
抽象组件通常非常稳定
SAP:稳定抽象原则
一个组件的抽象化程度应与其稳定性程度保持一致
抽象化衡量程度
抽象程度 = 抽象类和接口的数量 / 组件中类的数量
- 痛苦区:非常稳定且非常具体
- 如数据库表结构与工具类
- 无用区:无限抽象,无人使用