DDD核心概念理解

寫在前面

對於領域,業務,業務模型,解決方案,BC,領域模型,微服務這些概念常常分不清,可是這些知識在進行領域建模及DDD落地過程當中又比較重要。設計模式

領域,業務和業務模型

  • 領域:問題域,問題空間,領域是一種邊界,範圍,一個領域每每表明了一個問題域的邊界,業務範圍越大,領域邊界就越大。
  • 領域圍繞業務創建邊界,由於業務不一樣,因此也存在領域的大小和領域劃分,劃分出來的領域成爲子域,每一個子域對應一個小問題或小業務,因重要性不一樣又劃分爲核心子域和支撐子域。
  • 業務每每對應一個業務模型,從業務自己出發,分析業務邊界範圍內的各類業務場景,及業務概念之間的關係。獲得業務模型最經常使用的方法是名詞動詞形容詞分析法,還有好比四色原型分析,找到一個適合本身的,業務模型提煉了業務核心概念及其關係,能夠幫助咱們更好理解業務自己。

解決方案

進行DDD實踐時,回進行需求分析,領域劃分,領域建模等工做,系統落地則須要一套解決方案,若是實現一個電商平臺,須要一個複雜的系統解決方案,若是方案設計的過大,各模塊,組件柔和在一塊兒,就不利於整個系統維護-演進-伸縮等需求。因此須要對解決方案進行拆分,成爲一個個獨立的小的解決方案。微服務

領域表明問題域,解決方案表明解空間性能

解決方案的拆分每每沒有捷徑,仍是須要經驗,對系統的熟悉程度等狀況。利用軟件設計的各類原則,最佳實踐,設計模式,非功能特性需求,及團隊狀況來指導咱們解決方案的拆分和落地。設計

拆分有時能夠從性能角度切入,有時能夠從業務角度切入,有時能夠藉助CQRS,或者伸縮性角度考慮,找到適合本身團隊和項目自己狀況,最合適的就是最好的。對象

BC

BC做爲界限上下文,是DDD的核心概念,有Bounded和Context兩個概念,一個場景糾纏多種上下文,是一個時空感的概念。 經過上下文邊界能夠對邊界內的領域模型進行對象概念的明確,若是沒有這個上下文邊界,同一個概念可能存在歧義,理解上產生誤差。好比商品在商品中心的BC中是聚合根,而在訂單的BC中含義不一樣,只是一個值對象。原型

領域模型

領域模型是DDD中的核心概念,是業務拆分,軟件設計的綜合結果,任何一個領域模型,都是在特定的BC邊界內纔有意義。電商

業務模型是對業務概念及其關係的表達,領域模型在業務模型基礎上,採用OOA/D的思想進行進一步抽象的設計模型,領域模型中有聚合,實體,值對象的區分。多個業務模型能夠雜糅到某個領域模型之中。基礎

進行領域建模大體的過程:軟件

  • 獲得業務模型
  • 運用軟件設計思想和原則對業務模型進行模型提煉

微服務

微服務出現以後,對於微服務的劃分和DDD中BC有很大的契合點,有相同的探尋邊界的原則。方法

總結

  • 領域=問題域=問題空間=業務邊界
  • 每一個業務的問題均可以推導出一個業務模型
  • 領域拆分,業務建模,是需求分析階段須要作的事情
  • 解決方案的拆分,領域建模,是軟件設計階段該作的事情
  • 解決方案的邊界就是BC
  • BC邊界契合微服務的邊界
相關文章
相關標籤/搜索