同樣的東西擺在一起,能夠使系統更容易瞭解與修改。增加凝聚力正是做這樣的事情。
如果一個系統的凝聚力很高,那麼其中一個功能的需求變更時,只要在附近幾個地方修
改程式即可。不需要整個系統全部重新評估與規劃,大大地節省系統維護的成本。
增加凝聚力可以提升系統的維護性,以下由強到弱依序列出凝聚力的種類:
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
說明:收集那些無法分類在其他地方的類別。此凝聚力最弱。
好處:當您需要新增常用的功能時,只要在同一個地方新增程式碼。
指引:找出各個類別常用的功能,這通常會是數學的運算式或是型別的轉換。