同样的东西摆在一起,能够使系统更容易了解与修改。增加凝聚力正是做这样的事情。
如果一个系统的凝聚力很高,那么其中一个功能的需求变更时,只要在附近几个地方修
改程式即可。不需要整个系统全部重新评估与规划,大大地节省系统维护的成本。
增加凝聚力可以提升系统的维护性,以下由强到弱依序列出凝聚力的种类:
1. Functional cohesion
说明:输入参数,回传一个值,不做其他事。永远试图达成此种凝聚力。
好处:没有任何边际效应。 (immutable)
指引:删除所有 mutable 行为,也移除存取参数以外的变量。
2. Layer cohesion
说明:同层的类别放在一起。最大地达成此种凝聚力。
好处:系统设计的 Common Sense。
指引:区分出高层类别与低层类别
(这边针对“层”做说明。高层可以呼叫低层的功能,但是低层不能呼叫高层的功能)
(举例而言:应用程式可以呼叫作业系统的功能,但是作业系统不能呼叫应用程式的功能)
3. Communicational cohesion
说明:同一资料的处理逻辑都放置于同一类别。尽量达成此种凝聚力。
好处:当您想要修改资料的时候,只需要在同一个地方寻找程式码。
指引:不要在多个不同的地方处理相同的资料。处理相同资料的程式逻辑全部移动到同
一地方。
4. Sequential cohesion
说明:一连串的程序放在一起。在不违反前三条的情况下,达成此种凝聚力。
好处:当您想要修改某个连续动作时,只需要在同一个地方寻找程式码。
指引:找出程序的运作流程,若此地的输出马上是下一个地方的输入,下一个地方的输
出即将是下下个地方的输入,那么请将这些程式逻辑集中在同一个地方。
5. Procedural cohesion
说明:连续的程序放在一起。不要在牺牲前四条的情况下勉强达成此种凝聚力。
好处:当您想要修改某个使用案例的程序时,只需要在同一个地方寻找程式码。
指引:找出使用案例,落于相同使用案例的程序放在一起。其他使用案例的程序放到一旁
6. Temporal cohesion
说明:相同时间或时机点执行的运算放在一起。比上一种凝聚力更弱。
好处:当您想要修改某个时间点执行的运算时,只需要在同一个地方寻找程式码。
指引:找出系统启动或初始化会执行的所有程序,把他们放在一起。找出系统关闭或终止
会触发的所有程序,把他们放在一起。
7. Utility cohesion
说明:收集那些无法分类在其他地方的类别。此凝聚力最弱。
好处:当您需要新增常用的功能时,只要在同一个地方新增程式码。
指引:找出各个类别常用的功能,这通常会是数学的运算式或是型别的转换。