Architecture 清洁建筑-示例;“三要素原则”;

Architecture 清洁建筑-示例;“三要素原则”;,architecture,clean-architecture,Architecture,Clean Architecture,我正在阅读“组成原理”部分 在这里,作者解释了组件设计的三个原则。我想我有点孤立地理解他们 重用/发布等效原则(REP) 我对这一点的理解是,为了使包可重用,需要有适当的发布跟踪机制(版本、文档等) 共同闭合原理(CCP) 这一条规定,出于相同原因而更改的类需要捆绑在同一个包中。目标是实现可维护性->如果应用程序中的某些内容发生更改,则可能会在单个软件包中更改(或仅更改几个) 通用重用原则(CRP) 如果用户依赖于某个包,则他们应该依赖于该包中的所有类。 也就是说,包应该只包含那些一起重用的类

我正在阅读“组成原理”部分

在这里,作者解释了组件设计的三个原则。我想我有点孤立地理解他们

重用/发布等效原则(REP)
我对这一点的理解是,为了使包可重用,需要有适当的发布跟踪机制(版本、文档等)


共同闭合原理(CCP)
这一条规定,出于相同原因而更改的类需要捆绑在同一个包中。目标是实现可维护性->如果应用程序中的某些内容发生更改,则可能会在单个软件包中更改(或仅更改几个)

通用重用原则(CRP)
如果用户依赖于某个包,则他们应该依赖于该包中的所有类。
也就是说,包应该只包含那些一起重用的类

在研究了这些原则之后,作者展示了这些原则的“三元组”,它类似于经典的CAP定理:

我的理解是,在设计组件时,您只能选择遵循三个原则中的两个

这是我不太明白的部分:

  • 我看不出使用REP对其他任何一个原则都是唯一的。据我理解,满足REP意味着实现发布管理机制。我不明白坚持CCP和CRP是如何禁止这种行为的
  • CCP和CRP如何一起使用?我认为它们是完全相反的原则。前者规定类应以一种将它们一起更改的方式分组,而后者规定类应以一种将它们一起使用的方式分组。我认为这两个目标是相反的,我不知道如何才能一起实现
  • 如果有人帮助揭穿这些原则,我会很高兴,因为这本书缺少任何可能的“三位一体对”的实际例子,例如REP和CRP、REP和CCP、CCP和REP


    如果有人能提供这些缺失的可能配对的例子,那就太好了

    通用闭包原则:不要让应用程序中的组件过于宽泛

    倾向于一起更新的组件应分组在一起。如果在进行一次更改时许多组件需要更新,则组件之间可能存在耦合。随着组件之间耦合程度的增加,由于意外的用例和不完善的文档,一个组件中的微小更改产生广泛影响的可能性也随之增加

    通用重用原则:不要使应用程序中的组件过于特定

    如果组件用户需要组件的一个部分,则应包括组件的所有部分(因为它们是相关的/需要的)。从用户的角度来看,组件应该做好一件事。构成“一件事”的所有逻辑都应包含在组件中。将逻辑打包到组件中的主要好处是提高可用性和可维护性,重用单元应该是重用有用的单元

    重用/发布等效原则:不要假设组件是完美的

    手动传递单个类是不可维护的。要使给定组件有用,必须有一种机制来提供长期稳定性(例如:注意到的问题已修复,等等)。因此,应该有某种形式的发布流程,可以在其中记录问题,并可以找到和使用组件的更新版本

    在从可用性和可维护性的角度确定给定组件的具体/广泛程度时,需要考虑权衡

  • 中国共产党没有遵守?无法维护组件。难以解决问题/添加增强功能
  • 没有被跟踪?组件没有用处。难以使用的组件
  • 没有被跟踪?组件不可信。难以使用的组件
  • 这是一种权衡,但与上限相比似乎有点牵强。CAP更像是一个“选择你的毒药”,而这更像是一个“记住为什么要编写组件”。我倾向于认为存在一些主观的优化结构,它提供了可用和可靠的组件。CAP客观地说,只能选择2个