為何要寫這本書#

軟體設計書籍通常只用幾頁談論耦合(coupling),偶爾會專門安排一章。然而當潮流更迭,耦合卻始終是軟體設計的核心議題。產業中充斥著「耦合是壞東西」的口號,卻鮮少有人真正定義它、量化它,更遑論討論它何時是必要、何時才會變成問題。

作者 Vlad Khononov 的寫作動機來自一段慘痛經驗:

  • 約莫 2014 年,微服務(microservices)以「解耦救星」的姿態出現
  • 他在當時的專案中,將微服務圍繞業務實體(business entities)設計,每個 API 大致對應 CRUD 操作,宣稱「每個實體都能獨立演進」
  • 結果是「宇宙級的失敗」——本應解耦的設計,反而誕生了一隻耦合的巨獸

這次失敗成為轉機。他翻閱大量論文與書籍,最終在 1975 年 Yourdon 與 Constantine 所著《Structured Design》第六章〈Coupling〉中找到答案:所有的設計錯誤都早已被前人記錄。從此,他踏上重新發掘那些「我們曾經知道、卻已經忘記」的耦合知識的旅程,逐步整理出一個三維的耦合模型(three-dimensional model of coupling)。

本書源自 Vlad 在 2020 年 Domain-Driven Design Europe 會議上的演講「Balancing Coupling in Distributed Systems」,會後 Rebecca Wirfs-Brock 鼓勵他將想法寫成一本書。

適合的讀者#

只要你是「製作軟體的人」,這本書就是寫給你的。

無論是初階、資深或首席工程師,或是架構師,只要你在任何抽象層級上做設計決策,耦合就會成為成敗關鍵。學會駕馭耦合的力量,是建構模組化(modular)且可演進(evolvable)系統的必修課。

本書架構#

全書分為三部分,依「概念—工具—應用」的順序展開:

Part I:耦合(Coupling)#

奠定大局觀,把耦合放回系統設計、複雜度與模組化的脈絡中。

  • Chapter 1 耦合與系統設計:先定義什麼是「系統」,再帶入耦合在系統中扮演的角色,建立後續章節共通的詞彙
  • Chapter 2 耦合與複雜度:Cynefin:以 Cynefin 框架精準定義「複雜(complex)」是什麼
  • Chapter 3 耦合與複雜度:交互作用:從系統角度討論複雜度,說明軟體為何會變得複雜,以及這跟耦合的關聯
  • Chapter 4 耦合與模組化:定義模組化(modularity)與軟體模組(software module),說明耦合是把系統推向複雜或推向模組化的「舵」

Part II:維度(Dimensions)#

聚焦耦合本身,介紹多個用來評估耦合效應的模型。

  • Chapter 5 結構化設計的模組耦合:1960 年代末的經典模型,至今仍適用
  • Chapter 6 共生(Connascence):從另一角度檢視「模組為何同生共死」
  • Chapter 7 整合強度(Integration Strength):將前兩者整合為單一模型,用來評估元件間的知識共享程度
  • Chapter 8 距離(Distance):把焦點轉到「空間」維度,討論模組在程式碼庫中的物理位置如何影響耦合
  • Chapter 9 易變性(Volatility):把焦點轉到「時間」維度,討論模組變更的原因、傳播路徑與預期變更率

Part III:平衡(Balance)#

把前兩部分的觀念串成設計工具,把耦合本身變成可運用的設計手段。

  • Chapter 10 平衡耦合:提出平衡耦合模型(balanced coupling model),整合各維度形成整體性的評估方式
  • Chapter 11 重新平衡耦合:討論系統的策略性演進,以及如何透過調整耦合力道來容納變化
  • Chapter 12 軟體設計的碎形幾何:結合其他產業甚至自然界的知識,揭示成長型系統背後的設計原理
  • Chapter 13 平衡耦合的實戰:用案例展示如何把平衡耦合模型套用到知名架構風格、設計模式與設計原則
  • Chapter 14 結語:總結全書,給出日常應用的最後建議

案例研究:WolfDesk#

書中所有案例都改編自作者真實參與的專案,為了避免揭露機密而託名於虛構公司 WolfDesk。

案例中所有「故事」皆為真實,僅公司名稱與細節經過匿名化處理。

WolfDesk 提供 SaaS 形式的客服管理系統,其商業模式有幾項關鍵特徵:

  • 計費單位是支援案件:不依使用者數量收費,而是依每個計費週期內開出的支援案件數計費,並設有用量級距折扣
  • 生命週期演算法:自動關閉長期未活動的案件,鼓勵客戶為新問題開新案件
  • 詐欺偵測:分析訊息內容,找出在同一案件中討論不相關主題的情況
  • 支援自動駕駛(support autopilot):分析新案件並自動從歷史紀錄找出可能的解答
  • 管理介面:可設定支援案件分類、產品清單,以及各部門的值班排程

全書要傳達的核心#

軟體系統的價值不只取決於目前的功能,還取決於它能否持續演進、成長、回應未來的需求;而高效的跨元件互動設計,正是讓系統經得起時間考驗的關鍵——這一切的核心,就是耦合。

本書希望帶讀者超越「It depends」這個萬用答案,學會回答:「到底 depends on 什麼?」