淺模組(shallow module):介面相對於它提供的功能而言過於複雜。
典型例子:linked list#
- 操作 linked list 的程式碼本來就不多(插入、刪除元素只要幾行)
- 因此 linked list 抽象沒藏太多細節:介面複雜度幾乎等於實作複雜度
- 淺類別有時不可避免,但對管理複雜性幫助不大
極端反例#
以下是某設計課學生作業中的極端例子:
private void addNullValueForAttribute(String attribute) {
data.put(attribute, null);
}從複雜性管理的角度看,這個方法讓事情變糟,不是變好:
- 沒有提供任何抽象——所有功能都透過介面暴露
- 呼叫端可能還得知道屬性會存進
data變數 - 思考介面所需的力氣 ≈ 思考整個實作所需的力氣
- 文件如果寫好,會比方法本身的程式碼更長
- 連呼叫這個方法的鍵盤敲擊次數,都比直接操作
data變數還多 - 引入了新介面(讓開發者要學習)卻沒有任何補償性效益
紅旗:淺模組(Red Flag: Shallow Module)#
淺模組:介面相對於它提供的功能而言過於複雜。
淺模組對抗複雜性幫助不大,因為它們提供的好處(不必了解內部運作)被「學習與使用介面的成本」抵消。
小模組往往是淺的。