Chapter 14:結語#

模組化與複雜度的對立#

模組化讓系統易於變動;複雜度則讓系統只能在試誤中被勉強推動。模組化讓內部直觀可解;複雜度則讓元件糾纏不清。

兩者既然完全相反,必然共享相同的衡量維度——共享知識距離

模組化要求:「該一起改的元件聚在一起,不該一起改的元件分散開來」。複雜度則完全相反。

模組化 = 強度與距離反向;複雜度 = 強度與距離同向。

Figure 14.1: 模組化與複雜度作為「共享知識 × 距離」的組合

為什麼引入易變性#

追求完美平衡並不總是划算或可能。當上游元件本來就不會改,較弱的設計也可以被容忍——這正是 volatility 進入公式的理由:

BALANCE = (STRENGTH XOR DISTANCE) OR NOT VOLATILITY

在高易變性下,把該一起變的元件放近一點、不該一起變的拉遠一點,是降低變更時認知負擔的關鍵。

平衡需要被「維持」#

今天完美的設計,在明天可能變成 under-engineering。三個維度中任何一個改變,都可能打破平衡——必須持續對策略性變化保持警覺,並透過 rebalancing 修正。

耦合不是「好或壞」的單一維度概念。balanced coupling 模型說明:模組化設計需要三個維度同時保持平衡

Epilogue:書本身就是一種耦合範例#

考慮你正在讀的文字:若一個字要改,可能影響同一句話的其他字、同一段落的其他句子、同一章的其他段落、其他章節……影響隨距離遞減。

這個再簡單不過的「相關的擺一起、不相關的拉開」原則,影響著我們身邊的一切組織方式。

棘手的問題其實是「什麼算相關?」按字母排或按字數排顯然沒用——我們依意義關係把字組成句、把句組成段、把段組成章。

軟體設計也一樣:依責任而非任意切分把元件組起來。功能在不同抽象層級各異,但組織原則始終相同。

Appendix A:耦合敘事詩#

全書每章開頭的詩句,串成一首縱貫全書的「耦合之歌」。茲節錄關鍵片段:

  • 「強耦合或弱耦合,我們都心有所懼;床下那隻耦合怪獸……但少了它系統就會散架,耦合是不可拋棄的支柱。」
  • 「但若耦合不是敵人,那會是什麼?是複雜度——混沌的化身。要馴服這頭野獸,就要學會它的徵兆,Cynefin 框架指引方向。」
  • 「複雜不來自零件的數量大小,而是它們之間的互動……」
  • 「結構化設計率先示範模組如何相連、知識如何流動。」
  • 「Connascence 接下接力棒,揭示了每條連結的深度。」
  • 「整合強度模型……揭露知識流動細節。」
  • 「知識可遠可近,距離決定了成本。」
  • 「高距離又交換大量知識,看來不理想;但若它們從不變動,又何必動氣?」
  • 「東邊一改,西邊回響——軟體設計如下棋。要近還是要遠?顧問會說『it depends』!」
  • 「重新平衡耦合救得了你,抵禦複雜度的詭計。」
  • 「碎形幾何賦予系統繼續成長的力量……」
  • 「從一行方法到系統高階設計,耦合的維度都必須平衡且當先!」
  • 「模組化與複雜度方向相反,背後的力量卻完全相同——平衡耦合,讓知識循路而行,讓 bug 與 code gremlins 通通消失!」

Appendix B:耦合詞彙表#

「coupling」是個極度負荷過重的詞,常與其他術語組合出現。書末詞彙表把常見定義收齊。以下精選核心條目(完整版本請參照原書)。

核心模型詞彙#

  • balanced coupling:強度、距離、易變性三者的最佳組合,公式為 BALANCE = (STRENGTH XOR DISTANCE) OR NOT VOLATILITY
  • integration strength:整合強度模型,從 module coupling + connascence 整合而來,將四種知識(contract、model、functional、intrusive)放在同一個架構中
  • connascence:包含 static 與 dynamic 兩部分;前者描述編譯期關係,後者描述執行期關係
  • module coupling:結構化設計提出的六層模型——data、stamp、control、external、common、content

整合強度的四個層級#

  • contract coupling:透過整合專用模型(contract)通訊;最弱的整合強度
  • model coupling:跨邊界共享業務領域模型
  • functional coupling:實作密切相關的業務功能;變更很可能波及彼此
  • intrusive coupling:透過私有介面或實作細節整合;下游對上游一切變更敏感

關鍵屬性#

  • complexity:人面對系統時的認知負擔。在 balanced coupling 中:
    • COMPLEXITY = NOT (STRENGTH XOR DISTANCE)
    • GLOBAL COMPLEXITY = STRENGTH AND DISTANCE
    • LOCAL COMPLEXITY = NOT STRENGTH AND NOT DISTANCE
  • modularity:系統設計支援未來目標的能力。要管理本質性複雜度、消除意外性複雜度
  • cohesion:模組內部元素彼此相關的程度。在 balanced coupling 中對應「高強度 + 低距離」
  • coupling:系統設計的本質元素,讓元件能協同達成目標;要從強度、距離、易變性三維評估

距離相關#

  • distance:知識在元件間穿越的「空間」,受層級結構、runtime coupling、組織結構影響
  • lifecycle coupling:元件須一起被實作、測試、部署。距離越短,lifecycle coupling 越強
  • runtime coupling(亦稱 operational coupling):一個元件必須仰賴另一個元件才能運作;提高 lifecycle coupling、實質上降低距離
  • development coupling:開發過程中的相互影響。低距離即使無共享知識也會引發開發耦合

易變性相關#

  • volatility:元件預期變動率
    • 內部來自業務需求變動(用 DDD 子領域評估:core 最易變)
    • 外部來自上游元件變動(cascading change)

其他常見耦合詞#

  • afferent coupling:依賴某類別的「下游」類別數量
  • efferent coupling:某類別所依賴的「上游」類別數量
  • semantic coupling:來自元件對交換資料賦予的共同意義;contract 與 model coupling 都是其變體
  • sequential coupling(亦稱 temporal coupling):必須以特定順序或時間間隔執行;屬於 functional coupling 的較低 degree
  • transactional coupling:多個元件必須作為原子單位成功或失敗;屬於 functional coupling 的高 degree
  • design-time coupling:設計階段建立的依賴;對應 integration strength 的層級
  • pathological coupling = content coupling
  • module coupling 詞彙(content / common / external / control / stamp / data):見 Chapter 5

把這份詞彙表當作字典查閱:遇到別處談的新名詞時,先回到這裡看它對應 balanced coupling 模型中的哪一塊,再判斷是否引入新觀念或只是換個名字。

Appendix C:測驗題答案#

全書各章末附測驗題答案,供讀者自我檢核。完整答題對照請見原書 Appendix C,本綜整不重複列舉。