內(nèi)聚的含義:內(nèi)聚指一個模塊內(nèi)部元素彼此結(jié)合的緊密程度
在面向?qū)ο箢I(lǐng)域,談到“內(nèi)聚”的時候,模塊的概念遠遠不止我們通常所理解的“系統(tǒng)內(nèi)的某個模塊”這個范圍,而是可大可小,大到一個子系統(tǒng),小到一個函數(shù),你都可以理解為內(nèi)聚里所說的 “模塊”。所以可以用“內(nèi)聚”來判斷一個函數(shù)設(shè)計是否合理,一個類設(shè)計是否合理,一個接口設(shè)計是否合理, 一個包設(shè)計是否合理,一個模塊/子系統(tǒng)設(shè)計是否合理。
其次:“元素”究竟是什么? 有了前面對“模塊”的深入研究后,元素的含義就比較容易明確了(不同語言稍有不同)。
函數(shù):函數(shù)的元素就是“代碼”
類/接口:類的元素是“函數(shù)、屬性”
包:包的元素是“類、接口、全局數(shù)據(jù)”等
模塊:模塊的元素是“包、命名空間”等
再次:“結(jié)合”是什么? 英文的原文是“belong”,有“屬于”的意思,翻譯成中文“結(jié)合”,更加貼近中文的理解。但“結(jié)合”本 身這個詞容易引起誤解。絕大部分人看到“結(jié)合”這個單詞,想到的肯定是“你中有我、我中有你”這樣 的含義,甚至可能會聯(lián)想到“美女和帥哥”的結(jié)合,抑或“青蛙王子和公主”的結(jié)合這種情況。這樣的理解本身也并沒有錯,但比較狹隘。 我們以類的設(shè)計為例:假如一個類里面的函數(shù)都是只依賴本類其它函數(shù)(當然不能循環(huán)調(diào)用啦),那內(nèi)聚性肯定是最好的,因為“結(jié)合”得很緊密
判斷一個模塊(函數(shù)、類、包、子系統(tǒng))“內(nèi)聚性”的高低,最重要的是關(guān)注模塊的元素是否都忠于模塊的職責,簡單來說就是“不要掛羊頭賣狗肉”。
【內(nèi)聚的分類】
以下各種形式的內(nèi)聚的內(nèi)聚性越來越高
【巧合內(nèi)聚(Coincidental cohesion)】
延伸閱讀
學習是年輕人改變自己的最好方式