- 通用語言
通用語言定義上下文含義,限界上下文則定義領域邊界
1,包括 術語、應用場景
2, 包含名詞和動詞 名詞可以給領域對象命名,如商品、訂單等,對應實體對象;動詞則表示一個動作或事件,如商品已下單、訂單已付款等,對應領域事件或者命令。
定義過程;通過事件風暴得到用戶故事,通過用戶故事分析會形成一個個的領域對象,這些領域對象對應領域模型的業務對象,每一個業務對象和領域對象都有通用的名詞術語,並且一一映射。微服務代碼模型來源於領域模型,每個代碼模型的代碼對象跟領域對象一一對應。
在事件風暴過程中,通過團隊交流達成共識的,能夠簡單、清晰、准確描述業務涵義和規則的語言就是通用語言。
DDD 分析和設計過程中的每一個環節都需要保證限界上下文內術語的統一,在代碼模型設計的時侯就要建立領域對象和代碼對象的一一映射,從而保證業務模型和代碼模型的一致,實現業務語言與代碼語言的統一。
- 限界和上下文。
限界就是領域的邊界,而上下文則是語義環境。通過領域的限界上下文,可以在統一的領域邊界內用統一的語言進行交流。
限界上下文的定義就是:用來封裝通用語言和領域對象,提供上下文環境,保證在領域之內的一些術語、業務相關對象等(通用語言)有一個確切的含義,沒有二義性。這個邊界定義了模型的適用范圍,使團隊所有成員能夠明確地知道什么應該在模型中實現,什么不應該在模型中實現。
舉例: 保險業務領域有投保單、保單、批單、賠案等保險術語,它們分別應用於保險的不同業務流程。
首先,領域可以拆分為多個子領域。一個領域相當於一個問題域,領域拆分為子域的過程就是大問題拆分為小問題的過程。保險領域被拆分為:投保、支付、保單管理和理賠四個子域。子域還可根據需要進一步拆分為子子域,比如,支付子域可繼續拆分為收款和付款子子域。拆到一定程度后,有些子子域的領域邊界就可能變成限界上下文的邊界了。子域可能會包含多個限界上下文,如理賠子域就包括報案、查勘和定損等多個限界上下文(限界上下文與理賠的子子域領域邊界重合)。也有可能子域本身的邊界就是限界上下文邊界,如投保子域。
每個領域模型都有它對應的限界上下文,團隊在限界上下文內用通用語言交流。領域內所有限界上下文的領域模型構成整個領域的領域模型。
理論上限界上下文就是微服務的邊界。我們將限界上下文內的領域模型映射到微服務,就完成了從問題域到軟件的解決方案。
可以說,限界上下文是微服務設計和拆分的主要依據。在領域模型中,如果不考慮技術異構、團隊溝通等其它外部因素,一個限界上下文理論上就可以設計為一個微服務。