[ASP.NET]91之ASP.NET由淺入深 不負責講座 Day16 – 高內聚、低耦合

[ASP.NET]91之ASP.NET由淺入深 不負責講座 Day16 – 高內聚、低耦合

前言
講完了OO的幾個概念,再來幾篇要來介紹好的OO原則跟設計方式。

今天先講很常聽到的『高內聚』、『低耦合』,大家都知道這是好的,但卻很難解釋什麼是內聚力,什麼是耦合,以及為什麼要高內聚,為什麼要低耦合。

Issues

  1. 高內聚
    高內聚,簡單的說,就是有點『單一功能』的味道。
    某個class或function負責處理的事情,已經無法再切分成別的class或function,稱為內聚力高。
  2. 低耦合
    低耦合,簡單的說,就是相依性低。也有點類似『牽一髮動全身的程度』。
    當一個需求異動,要改到很多地方,或是改了一個部分,很多地方都錯了,通常就是耦合性高。
  3. 舉例
    高內聚低耦合如果要舉個例子來說,就像樂高積木。
    樂高積木可以組合出各式各樣的模型,要重新組裝、異動,也都很有彈性。
    1. 內聚,就是一塊一塊積木應該切分的很清楚、很細,且無法再切得更細。
      如果是低內聚,就代表一塊積木都超大一塊的,當要組裝比較小的模型時,是無法拆開的。
      假設有一塊積木是1號~10號這麼大,另一塊積木則是11號~20號。
      但現在需求是需要組裝一個是5號~15號的模型出來,就做不到了。
      除非再去重做一個5號~15號的積木。
      所以如果是高內聚的設計方式,我們每一個單位都是一塊積木。
      我們需要5號~15號,只需要把5號~15號這11塊積木組裝起來就可以了。 

    2. 耦合,就是積木與積木之間組裝的方式。
      高耦合,就代表黏的拔不開。低耦合,就代表容易拔開組裝。
      (所以樂高的積木是做的有凸起跟凹槽的,凸起與凹槽,就有點像介面)
      如果是高耦合,就可能組裝積木的方式是用強力膠黏,當所有東西都用強力膠黏時,
      假設以剛剛5號~15號積木的例子,現在8號要抽換成18號,是很難抽換的,得想辦法鋸斷強力膠黏的部分。
      如果是低耦合,就可能是現在樂高的組合方式,透過積木之間的凸起與凹槽來做結合。或是像卡榫、螺絲一般,是方便組裝跟抽換的。只需要把8號前後拔開,再把18號放進來跟前後結合即可。

  4. 高內聚低耦合可達到的目的
    需求異動容易抽換、修改與增加功能,而不會對太多既存功能造成影響。
    每個功能重用性高、擴展性好、維護性高。


結論
高內聚、低耦合是我們OO設計的目的,
而要盡量遵守的原則,則是SOLID原則。
實際上會面對到的設計問題,則可透過Design patterns來當作我們解決某個特定issue的藍圖。




最後,請想學習的客倌,看完這篇文章思考一下,下列的問題該如何回答:

  1. 什麼是高內聚?什麼是低耦合?
  2. 為什麼要高內聚與低耦合?
  3. 舉例說明。

 


blog 與課程更新內容,請前往新站位置:http://tdd.best/