[獨自murmur]Loose coupling
獨自murmur的分類,是針對design programs的一些觀念,想辦法用自己的話講出來的部分。
所以我會盡力的描述我腦袋中對該issue的定義,希望對初學者能比較概觀的認識,
也希望其他前輩可以補充一些意見。
鬆散耦合(Loose coupling)的部分,
推薦可以去看一下Code Complete2 ,Ch5-3,藕合(它的藕是蓮藕的藕,超怪的..)的部分。
昨天剛好有看到這一篇,很多東西心有戚戚焉...
舉個例子,
一樣複雜的function,一個是只有2個參數,另一個是5個參數,
那只有2個的參數,藕合性就比5個參數的鬆散(或是稱作「低」)。
簡單來說,
藕合性低就代表「如何讓別人更容易使用你的模組」,這邊的模組可能包括了class,或是public的function。
假設你有4個子系統,或4個模組,
整個系統最多可以有6條線,也就是子系統之間的關聯,
想辦法把這個關聯降低到最低,但是又能涵蓋到整個系統功能的完整性,這樣就成功了。
但,如果你為了降低模組之間的關聯性,而將各個子系統併在一起,
導致原本獨立、功能單純、明確的子系統,變成大而複雜,
當然它與外界的關聯「數目」會降低,但是你的子系統就變成「低內聚」,
簡單來說,
高內聚就代表「此模組功能定義明確,獨立,幾乎無法再分割其他功能模組出來」。
這也就是為什麼「高內聚」跟「低耦合」常會被擺在一起的原因,
要兩個都成立,才代表你的系統建構的漂亮,
每個功能模組自己看自己,無法再切出更細的功能模組,且每個功能模組彼此之間,關聯性低,
這樣可以讓你的功能模組設計完,很容易被呼叫,而且呼叫的頻率會變高。
一點個人的小想法,不一定代表我說的對...因為我也是正在摸索的菜鳥....
希望拋磚引玉啦...引出雲遊四海的專家出來噹我...
2009/04/10 補充:人家舉的例子
從公司的職務設計來看
高內聚 => 你身上的事情都是非你不可,無法分割的,不能夠再委派出去的
低耦合 => 要做一件事情,不用找一堆人來開會
blog 與課程更新內容,請前往新站位置:http://tdd.best/