在做軟體開發時,常常會聽到內聚性 (Cohesion)耦合性 (Coupling),這兩個詞,這也是在設計軟體架構常常要考慮到的事情,該如何在這兩個特性中各自取得平衡,是非常重要的一件事。

內聚性

內聚性簡單來說,就是在程式中,功能類似的東西或是相同用途的資料等等…,是否有放在相近的地方,和 OOP 中封裝的概念相似,一般會使用高內聚性、低內聚性來表示。比方說,將一些功能類似的函式打包成一個 class,就是一種高內聚性的表現。

通常會希望程式能夠有高內聚性,因為高內聚性和許多理想的軟體特性有關,包括 Robustness、Reliability、Reusability、Understandability 等等。

耦合性

耦合性簡單來說,就是兩個東西之間的相依性,比如兩個 class、兩個 function 等等,兩者的關係越大,耦合性就越高,一般來說,會希望兩個東西越獨立越好,因為若兩者耦合性越高,則改變其中一個對另一個造成的影響可能就越大,所以一般來說會希望在保有相同的特性下,耦合性越低越好

平衡與取捨

通常會希望整體保持高內聚、低耦合,但有時為了程式簡潔,或是設計方便,適時地降低內聚性或提高耦合性是有必要並且可以接受的

比方說,一段程式碼可能在一些 functions 中都存在,可以把它拉出來獨立成一個 function,雖然這樣可能會導致 function 變的 impure,並且也會降低內聚性,但可以增加可讀性。

另一個例子,在某些時候為了方便會定義一些 global variable,雖然不是好習慣,可能產生沒預期的 side effect,耦合性也相對提高,但如果在可控的情況下,使用 global variable 還是會帶來一些好處。

軟體架構的重要性

在軟體開發前先設計軟體架構非常重要,好處也非常多,以我自己的例子來說,

參考資料

内聚性(電腦科學) - 維基百科,自由的百科全書