敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(七)包的内聚性原则

本文为敏捷软件开发 - 原则、模式与实践系列的一部分。

本文对应原书第20章前半部分

包的内聚性原则

重用发布等价原则(REP - The Reuse/Release Equivalence Principle)

重用的粒度就是发布的粒度

REP指出,一个包的重用粒度可以和发布粒度一样大。我们所重用的任何东西都必须同时被发布和跟踪。简单的编写一个类,然后声称它是可重用的做法是不现实的。只有在建立一个跟踪系统,为潜在的使用者提供所需要的变更通知、安全性以及支持后,重用才有可能。

REP带给我们了关于如何把设计划分到包中的第一个提示。由于重用性必须是基于包的,所以可重用的包必须包含可重用的类。因此,至少,某些包应该由一组可重用的类组成。

共同重用原则(CRP - The Common Reuse Principle )

一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。

这个原则可以帮助我们决定哪些类应该放进同一个包中。它规定了趋向于共同重用的类应该属于同一个包。

类很少被孤立的重用。一般来说,可重用的类需要与作为该可重用抽象一部分的其它类协作。CRP规定了这些类应该属于同一个包。在这样的一个包中,我们会看到类之间有很多的相互依赖。

CRP告诉我们更多的是,什么类不应该放在一起。CRP规定相互之间没有紧密联系的类不应该在同一个包中。

共同封闭原则(CCP - The Common Closure Principle )

包中的所有 类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响。

这是单一责任原则对于包的重新规定。正如SRP规定的一个类不应该包含多个引起变化的原因那样,这条原则规定了一个包不应该包含多个引起变化的原因。

CCP鼓励我们把可能由于同样的原因而更改的所有类共同聚集在同一个地方。如果两个类之间有非常紧密的绑定关系,不管是物理上的还是概念上的,那么它们总是会一同进行变化,因而它们应该属于同一个包中。这样做会减少软件的发布、重新验证、重新发行的工作量。

这个原则和开放封闭原则密切相关。本原则中 “封闭”这个词和OCP中的具有同样的含意。CCP通过把对于一些确定的变化类型开发的类共同组织到同一个包中,从而增强了上述内容。因而,当需求中的一个变化到来时,那个变化就会很有可能被限制在最小数量的包中。

结论

这3个关于包内聚性的原则揭示了,在选择要共同组织到包中的类时,必须要考虑可重用性与可开发性之间的相反作用力。在这些作用力和应用的需求之间进行平衡不是一件简单的工作。此外,这个平衡几乎总是动态的。

完整内容请查看敏捷软件开发 - 原则、模式与实践系列

你可能感兴趣的:(敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(七)包的内聚性原则)