知识卡片

CCP共同闭包原则是SRP在组件层面的再度阐述

普通读书笔记卡

内容

共同闭包原则(CCP)要求:应该把那些会同时修改、并且为相同目的而修改的类放到同一个组件中,把不会同时修改、不为相同目的而修改的类放到不同组件中。这本质就是[[SRP的真正含义是只对一类行为者负责而非只做一件事]]在组件层面的翻版——SRP说一个类不该同时存在多个变更原因,CCP说一个组件也不该同时存在多个变更原因。对大部分应用而言,可维护性远比可复用性重要:如果某处代码要变更,最好这些变更都体现在同一个组件里,而不是散落在多个组件中,因为一旦变更集中在一个组件,就只需要重新部署这一个组件,其他组件不必被重新验证、重新部署——这直接降低了发布、验证、部署的工作压力。CCP和[[OCP在架构层面的核心机制不想被修改影响的组件应被依赖]]谈到的”闭包”概念紧密相关:OCP要求类应该易于扩展、抗拒修改,但100%的闭包是不可能的,所以架构师只能战略性地选择闭包范围——设计类时依据历史经验和预测能力,把大概率会一起变更的点尽量聚合在一处,这样某类变更发生时,影响范围就能被限制在有限的相关组件内。SRP和CCP可以用同一句话概括:将由于相同原因而修改、并需要同时修改的东西放在一起;将由于不同原因而修改、不需要同时修改的东西分开。

参考来源

- 位置:《架构整洁之道》第13章《组件聚合》"共同闭包原则""与SRP原则的相似点"(源文件:_epub-src/text/part0013_split_002.html) - 结论依据:原文给出CCP定义并明确说明"这其实是SRP原则在组件层面上的再度阐述",解释可维护性重要性驱动"变更集中到一个组件"的收益,并将CCP与OCP的战略性闭包选择相关联,直接支撑本卡片结论。 - 原始内容:我们应该将那些会同时修改,并且为相同目的而修改的类放到同一个组件中……这其实是SRP原则在组件层面上的再度阐述……将由于相同原因而修改,并且需要同时修改的东西放在一起。将由于不同原因而修改,并且不同时修改的东西分开。