DDD 總覽
模型: 對(duì)現(xiàn)實(shí)的解釋 —— 把與問題密切相關(guān)的部分抽象出來,而忽略無關(guān)的細(xì)節(jié)。
領(lǐng)域: 軟件是為了解決用戶的具體需求,這些用戶應(yīng)用軟件的問題區(qū)域就是軟件的領(lǐng)域。
領(lǐng)域模型(Domain Model):對(duì)問題有組織、有選擇的抽象。
通用語言 (Ubiquitous Language)
限界上下文(Bounded Context)
限界上下文是一種概念上的邊界,領(lǐng)域模型作用于其中。
在一個(gè)特定的限界上下文中,只使用一套通用語言,并且保證它的清晰性和簡(jiǎn)潔性。
戰(zhàn)略建模
上下文映射圖(Context Map)
問題域
解決方案域
將重要的、復(fù)雜的模型稱為核心域(Core Domain)。
將相對(duì)次要的稱為支撐子域(Supporting Subdomain)。
使用上下文映射圖展示限界上下文之間的關(guān)系,來理解項(xiàng)目的范圍。

架構(gòu) (Architecture)
架構(gòu) (Architecture)
六邊形(Hexagonal)架構(gòu)
一個(gè)新的限界上下文或者上下文映射圖可能需要一個(gè)新的架構(gòu)。但是領(lǐng)域模型應(yīng)當(dāng)是架構(gòu)中立的。模型周圍與模型之間是存在架構(gòu)的。
一種能夠支撐限界上下文的架構(gòu)是六邊形(Hexagonal)架構(gòu),他可以輔助其他架構(gòu)風(fēng)格,比如SOA,REST,Event-Driven Architecture.
架構(gòu)并非一成不變,業(yè)務(wù)的領(lǐng)域建模更加重要,因此不要本末倒置。
戰(zhàn)術(shù)建模
實(shí)體(Entity)
聚合(Aggregate)
值對(duì)象(Value Object)
資源庫(kù)(Repository)
領(lǐng)域服務(wù)(Domain Service)
領(lǐng)域事件(Domain Event)
模塊(Module)
限界上下文中進(jìn)行戰(zhàn)術(shù)建模。
戰(zhàn)術(shù)設(shè)計(jì)的一個(gè)重要模式是聚合(Aggregate), 聚合可以是實(shí)體,也可以是實(shí)體和值對(duì)象,在聚合的生命周期中,必須保持事務(wù)的一致性。
聚合通過資源庫(kù)進(jìn)行持久化。
領(lǐng)域建模中,有些業(yè)務(wù)操作不能很自然的放在實(shí)體或者值對(duì)象上,此時(shí)可以使用無狀態(tài)的領(lǐng)域服務(wù)(Domain Service)。
領(lǐng)域事件(Domain Event)表示領(lǐng)域模型中發(fā)生的重要事件。比如在對(duì)聚合進(jìn)行命令操作時(shí),聚合本身將發(fā)布領(lǐng)域事件。
模塊(Module)類似于Java中的包,如果機(jī)械的設(shè)計(jì)模塊而不是根據(jù)通用語言,那么將得不償失。模塊中的領(lǐng)域?qū)ο髴?yīng)該是類聚在一起的。