「模組化原則主張透過區域化與分解,建立內聚高、耦合鬆的抽象。」
從這本書本身談起#
想像把這本書改寫成一段沒有章節劃分的長文:
- 各個壞味道沒有順序、彼此無交叉引用。
- 設計原則的討論散落各處,難以統合理解。
沒有章節劃分的書讀起來像一團亂麻——這正是設計沒有模組化時的真實感受。

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 | 限制相依 |