建立完整的架構邊界(Full Architectural Boundaries)是昂貴的。 它需要雙向的多型介面(Reciprocal Polymorphism)、
獨立的輸入/輸出資料結構(Input/Output Data Structures),
以及繁瑣的依賴管理(版本控制、獨立編譯、獨立部署)。

這是個典型兩難:

  • YAGNI (You Aren’t Gonna Need It): 如果現在不需要,過早建立完整邊界是過度設計(Over-engineering)
  • 未來擴展: 如果完全沒有邊界,未來需要時再拆分會極其困難

折衷方案就是 「部分邊界(Partial Boundaries)」
架構師可透過以下三種方式來保留未來可能性,同時降低當下成本。

一、三種部分邊界策略#

策略作法優點缺點
省略最後一步完成所有程式碼工作,但不分開部署;放在同個元件中結構已分好,未來拆分只需移動類別缺乏編譯器強制力,邊界容易被侵蝕
單維邊界 (Strategy)使用 Service 介面,省略雙向介面結構簡單,實作容易易形成「反向通道」隱性耦合
外觀模式 (Facade)定義 Facade 類別轉發請求,省略 DIP隱藏系統複雜性違反 DIP,產生傳遞依賴

Figure 24.1: The Strategy pattern

Figure 24.2: The Facade pattern

二、架構師的職責:監控退化#

所有的部分邊界都有個共同風險:退化(Degradation)
因它們都不是「完整」邊界,隨著時間推移,分離性都會逐漸降低。

  • 判斷: 架構師須判斷哪裡需要邊界,以及要實作「完全」還是「部分」邊界
  • 監控: 如果選擇部分邊界,架構師須時刻關注其狀態。
    一旦發現依賴關係開始混亂(反向通道出現、邊界被侵蝕),就須決定是否將其升級為完整邊界

部分邊界是種「買保險」策略。 它允許你在不支付全額成本(獨立部署)的情況下,獲得大部分的架構優勢(解耦)。
但你須有紀律地維護它,否則它終將崩壞。