淺模組(shallow module):介面相對於它提供的功能而言過於複雜。

典型例子:linked list#

  • 操作 linked list 的程式碼本來就不多(插入、刪除元素只要幾行)
  • 因此 linked list 抽象沒藏太多細節:介面複雜度幾乎等於實作複雜度
  • 淺類別有時不可避免,但對管理複雜性幫助不大

極端反例#

以下是某設計課學生作業中的極端例子:

private void addNullValueForAttribute(String attribute) {
    data.put(attribute, null);
}

從複雜性管理的角度看,這個方法讓事情變糟,不是變好

  • 沒有提供任何抽象——所有功能都透過介面暴露
  • 呼叫端可能還得知道屬性會存進 data 變數
  • 思考介面所需的力氣 ≈ 思考整個實作所需的力氣
  • 文件如果寫好,會比方法本身的程式碼更長
  • 連呼叫這個方法的鍵盤敲擊次數,都比直接操作 data 變數還多
  • 引入了新介面(讓開發者要學習)卻沒有任何補償性效益

紅旗:淺模組(Red Flag: Shallow Module)#

淺模組:介面相對於它提供的功能而言過於複雜。

淺模組對抗複雜性幫助不大,因為它們提供的好處(不必了解內部運作)被「學習與使用介面的成本」抵消。

小模組往往是淺的。