內聚與耦合(三) 耦合篇 | Coupling

小新跟風間此時高耦合,圖片來源
複習前篇
在前篇中,了解內聚與高內聚,將模組內部元素屬於一起的程度視為內聚的定義,並列舉出高內聚的特性,這一篇要講解的就是耦合。
耦合是甚麼?
如果按照上一篇高內聚的定義,我們會得到許多在由業務定義、內部功能高度相關的模組,但一個巴掌拍不響,一個系統必然是許多模組交互所達成的。
而模組的交互程度就是耦合程度,相較於內聚是定義一個模組的內部元素相關程度而決定高低內聚,耦合則是模組間的相關程度。
耦合程度
以下是耦合程度從低到高排列:- 資料耦合(Data Coupling) : 模組間只透過基礎的值類型進行交互。
- 特徵耦合(Stamp Coupling) : 模組間透過一個資料結構,類似參考類型、物件進行交互。
- 控制耦合(Control Coupling) : 模組間的交互是傳遞控制變量,控制變量決定模組要切換成哪一種模式。
- 共同耦合(Common Coupling) : 多個模塊都依賴某一個全局變量。
- 內容耦合(Content Coupling) : A 模塊不透過 B 模塊所提供的方法進行讀取、修改,而是直接讀取、修改B模塊的內容。
必要的較高耦合
“ 具有低耦合的元素不會過度依賴其他元素,過度是與語境相關的。 ”
“ 高耦合本身並不是問題,問題是與不穩定的元素的高耦合。 ”
一昧地追求低耦合並非最佳的選項,尤其是拆分了高內聚的模組。
例如計算商品價格時,A 類別將產品這一個資料結構傳遞給 B 類別計算結果,如果強硬將產品拆分成一個個基礎的值類型反而會降低易讀性。
因此模組間需要在保持高內聚的情況下,盡量選擇耦合程度較低以及關聯程度最低的方案進行交互,以達成目的。
作者心得
內聚規範了模組內必須高度相關,耦合則是規範了模組內的交互必須選擇合適的方案,高內聚通常會帶來低耦合,因為高內聚將相似的元素聚在一起進而避免相似元素以模組的形式彼此耦合。
咒術迴戰看完了,我這輩子的壞事應該都可以抵銷了吧!