保持類的單一職責

心智極客發表於2020-02-13

在物件導向的開發過程中,類是最基本的組成單位。那麼,我們如何來衡量一個類的好壞呢?

直觀的講,短小的類肯定比臃腫的類好,而更為準確的衡量方式則是看該類有沒有符合單一職責。對於類的單一職責,很多開發者做不到,可能有以下原因

  1. 精力或者能力有限,只關心實現,不關心程式碼的整潔性;
  2. 認為將所有的東西放在一個類中更加直觀,方便管理。一是可以避免方法過多,二是可以避免方法之間的跳轉。

持有該觀點的人可能只是為了貪求寫程式碼的一時方便,他們明顯忽略了保持類的單一職責的好處。至少,有兩點好處是顯而易見的:

  1. 類很好的組織在了一起,除了方便測試外,後期修改的時候風險將會降到最低;
  2. 單一職責就好像一個個組塊一樣,其實更有利於管理和記憶;

那麼,怎麼看類有沒有符合單一職責呢?主要有以下幾點

  1. 從命名角度看,命名能夠直接體現出單一職責,如果一個類的命名沒有明確的體現出它的職責,那麼該類很可能需要進一步重構。
  2. 從修改的角度看,一個類應該有且只有一個修改的它的理由,如果有多個理由修改該類,那麼該類就不符合單一職責。
  3. 從內聚性的角度,類的內聚性要高。具體的講,就是類成員與類方法高度關聯,如果類的方法都用到了各個成員,那麼該類的內聚性就是極高的。

最後,介紹一下一個基本的重構思路

  1. 首先,一個類中的方法之間在互相呼叫,應該少直接傳遞引數,而是將引數提升到類成員中,然後通過訪問類成員的方式來獲取需要的引數。
  2. 一旦這麼做之後,你就會逐漸發現一些方法共享這些成員,另外一些方法共享其他成員。這樣的話,就可以進行拆分了,拆分後的類就能夠保持更高的內聚性。
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章