[讀書會] 領域驅動開發 第15章 - 精煉

前一章討論的是Context之間互動的策略,這一章探討的則是回到“Domain”,當原來的系統並沒有將領域標示出來,或者隨著專案增長使得領域越來越龐大,產生概念上模糊時,可以使用的一些策略。另外這章也特別強調,多數的開發者,尤其是資深的軟體工程師,有可能花了大量的時間在非領域核心邏輯的部分,而忽略Core Domain才是最重要需要精心設計的部分。


Core Domain

  1. 核心領域是系統最重要的部分,這部分難以靠外包或是既有套件滿足
  2. 需要將軟體中最有價值和最專業的概念分離以壓縮核心Domain
  3. 通常可以透過Domain Vision Statement進行指導

分離的策略

  1. Generic Subdomain
    1. 模型中大眾皆知的一般性原則,不是系統所關注的焦點
    2. 解決方案
      • 現成的開源專案或產品 => 可能過於細緻或是不夠理解,需要整合的成本
      • 公開的設計或是模型 => 不符所需
      • 外包 => 與外包團隊的溝通
      • 自行實作 => 低估開發成本與維運負擔
    3. 舉例:全球航運系統中的時區模型
    4. 具備通用性不代表需要重用
  2. Domain Vision Statement => 大方向的產品定位,而非技術實現
  3. Hightlight Core => 標明Core
  4. Cohesive Mechanism
    1. 將服務於Core Domain但不構成Subdomain的部分以框架行事獨立出來,並透過公開介面呼叫框架的方法
    2. 舉例:航運系統中的航路演算法可能過於複雜,可以在Core Domain中置入一組介面,並將演算法隱藏在介面之後
  5. Segregated Core
    1. 處理部分屬於核心,又有部分僅屬於支援的元素
    2. 通過重構將支援部分分離
    3. 能使Core清楚易懂,但分離出來的部分可能很複雜、糾結、晦澀
  6. Abstract Core
    1. 垂直切割與橫向切割
    2. Core需要獨立出太多Module引用,Module中的互動過於複雜
    3. 利用多形將子領域共同的部分抽象化,隱藏到單一介面之後

結語

需要重構時,須著重在最核心的部分,將核心提取出來,完善對Core的分離以根本的解決問題