重點摘要#
- 自 1805 年起,「分而治之」一直是處理複雜問題的核心策略
- 從關注點分離到封裝,最終得到的是邊界(boundaries)和介面(interfaces)
- 架構師的難題在於找到自然的邊界位置,並定義適當的介面
- Bounded Context 和 Context Map(來自 Domain-Driven Design)是強大的分析工具
詳細內容#
自從 Nelson 勳爵在特拉法加海戰中擊敗法西聯合艦隊以來,「分而治之」一直是處理複雜困難問題的核心策略。在軟體中,更常用的術語是關注點分離(separation of concern),由此衍生出封裝(encapsulation),再從封裝得到邊界和介面。
架構師的挑戰#
從架構師的角度來看,困難的部分在於找到自然的邊界位置並定義建構工作系統所需的適當介面。這在大型企業系統中尤其困難,因為其自然邊界稀少且領域交錯糾纏。
傳統的智慧如「最小化耦合、最大化內聚」和「不要在高頻率資訊交換的區域切割」提供了一些指引,但它們沒有告訴你如何以簡單的方式向利害關係人溝通問題和潛在的解決方案。
Bounded Context 與 Context Map#
Eric Evans 在《Domain-Driven Design》中提出的 Bounded Context 和 Context Mapping 概念正好解決了這個問題:
- Bounded Context:一個模型或概念被唯一定義的區域,以描述性名稱的雲朵或氣泡來表示其在領域中的角色和責任。例如航運系統可能包含:Cargo Operation、Cargo Scheduling、Harbor Movement 等
- Context Map:在白板上畫出 bounded contexts 之間的關係,包括組織性、功能性或技術性的依賴關係
Context Map 為架構師提供了一個強大的工具,讓他們能聚焦於哪些東西應該在一起、哪些應該分開,從而以明智的方式進行分而治之。
這項技術可以輕鬆地用於記錄和分析現狀,並從那裡引導重新設計,朝向具有低耦合、高內聚和定義良好的介面的更好系統前進。
— By Einar Landre