「模組化原則主張透過區域化與分解,建立內聚高、耦合鬆的抽象。」

從這本書本身談起#

想像把這本書改寫成一段沒有章節劃分的長文:

  • 各個壞味道沒有順序、彼此無交叉引用。
  • 設計原則的討論散落各處,難以統合理解。

沒有章節劃分的書讀起來像一團亂麻——這正是設計沒有模組化時的真實感受。

Figure 5.1: 沒有章節與小節劃分的書難以閱讀

本書反之:

  • 分解:分為「介紹背景/壞味道目錄/反思實踐」三大區塊。
  • 區域化:每個原則的討論集中在該章節入口。
  • 章節之間的交叉引用讓讀者快速定位相關概念。

軟體設計的模組化亦然。本書的「模組」指類別層級的抽象——具體類別、抽象類別、介面。目標是建立內聚高、耦合鬆的抽象。

模組化的四項使能技巧#

Figure 5.2: 模組化原則的使能技巧

  • 區域化相關的資料與方法(localize related data and methods)
    • 抽象應內聚——把相關資料與操作這些資料的方法放在同一處
  • 分解抽象到合宜大小(decompose abstractions to manageable size)
    • 大型抽象難以理解、維護;應拆解為中等大小(不過大、也不過小)的單元。
  • 建立無循環的相依(create acyclic dependencies)
    • 抽象之間的相依圖不應有環——否則一處改動會循環波及整體。
  • 限制相依(limit dependencies)
    • 控制 fan-in(多少抽象依賴此抽象)與 fan-out(此抽象依賴多少抽象)。
    • 高 fan-in:被改動會牽連大量客戶端。
    • 高 fan-out:他人改動會牽連到自己。

模組化壞味道與使能技巧的對應#

Figure 5.3: 違反模組化原則所產生的壞味道

設計壞味道違反的使能技巧
Broken Modularization區域化相關的資料與方法
Insufficient Modularization分解抽象到合宜大小
Cyclically-Dependent Modularization建立無循環的相依
Hub-like Modularization限制相依