代码改变世界

第四部分 组件构建原则

2021-12-14 00:21  张紫荣  阅读(83)  评论(0编辑  收藏  举报

第12章 组件

组件是软件的部署单元,是整个软件系统在部署过程中可以独立完成部署的最小实体。

第13章 组件聚合

究竟是哪些类应该被组合成一个组件呢。本章中,具体讨论三个与构建组件相关的基本原则

  • REP:复用/发布等同原则
  • CCP:共同闭包原则
  • CRP: 共同复用原则
复用/发布等同原则 REP

软件复用的最小粒度应等同于其发布的最小粒度

共同闭包原则 CCP

我们应该将那些会同时个性,并且为相同目的而修改的类放到同个组件中,而将不会同时修改,并且不会为了相同目的而修改的那些类放到不同的组件中。

  • CCP与开闭原则OCP也是紧密相关的。
  • CCP原则实际上就是SRP原则的组件版。
共同复用原则 CRP

不要强迫一个组件的用户依赖他们不需要的东西

  • CRP原则实际上是ISP原则的一个普适版
组件聚合张力图

REP为复用性而组合---太多不必要的发布----CCP为维护性而组合
CCP为维护性而组合----复用困难----CRP为避免不必要的发布而切分
REP为复用性而组合----太多组件变更----CRP为避免不必要的发布而切分
REP和CCP原则是黏合性原则,它们会让组件变得更大,而CRP原则是排除性原则,它会尽量让组件变小。

第14章 组件耦合

无依赖环原则(ADP)

必须控制好组件之间的依赖结构,绝对不能允许该结构中存在着循环依赖关系。
组件依赖结构所带刺的是一个有向图,我们称这种结构为有向无环图(Directed Acyclic Graph, 简写为DAG)

打破循环依赖

我们可以打破组件中的循环依赖,并将其依赖图转化为DAG。

  • 应用依赖反转原则(DIP)
稳定依赖原则(SDP)

依赖关系必须要指向更稳定的方向
不稳定度 = F(代码量大小,复杂度,清晰度,依赖该模块的数目),和变化频繁不频繁没关系。
不稳定性(I) = 出向依赖数量 / (入向依赖数量 + 出向依赖数量)。

稳定抽象原则(SAP)

一个组件的抽象化程序应该与其稳定性保持一致。如果一个组件想要成为稳定组件,那么它就应该由接口和抽象类组成,以便将来扩展。
衡量抽象化程度: A=Na(组件中抽象类和接口的数量)/Nc(组件中类的数量)
避开痛苦区和无用区: 组件不会为了追求稳定性而被设计得“太过抽象”,也不会为了避免抽象化而被设计得“太过不稳定”。这样的组件既不会特别难以被修改,,又可以实现足够的功能。