設計文檔模板:
- 系統背景和定位
- 業務需求描述
- 領域語言整理,主要是整理領域中的各種術語的定義,名詞解釋
- 領域划分(分析出子域、核心域、支撐域)
- 系統用例圖
- 每個子域的領域模型設計(實體、值對象、聚合、領域事件,需要注意的是:領域模型是需要抽象的,要分析業務本質,而不是簡單的直接對需求進行建模)
- 領域模型詳細說明(如為什么這樣設計的原因、模型內對象的關系、各種業務規則、數據一致性規則等)
- 領域服務、倉儲、工廠設計
- Saga業務流程設計
- 關鍵聚合根的狀態流轉圖
- 場景走查(講述如何通過領域模型、領域服務、倉儲、Saga流程等完成系統用例以及關鍵業務流程的)
- 架構設計(如傳統三層架構、經典四層架構、CQRS/ES架構)
一些其他的思考:
- 去除一切花俏的建模技巧,我覺得最重要的方向就是去努力分析問題和事物的本質,針對這個本質進行領域建模。這個領域建模,最主要的還是鍛煉的人的事物抽象能力。10個人,建出來的領域模型都不同。本質原因就是大家對同一個問題的理解不同,對事物的本質的理解不同。雖然最終都能解決當前的問題,但是對適應未來需求變化的能力卻是不同。
- 所以,我們要把時間花在多理解業務上,讓自己成為領域專家,只有這樣,才能充分理解業務。多理解一點業務,你才能更好的抽象出業務本質背后的領域模型。很少有人能做到很快理解業務,並很快針對業務設計出正確的領域模型,至少我是不行。
- 領域建模需要時間,是一個迭代的過程,人無完人。而時間很多時候也不會很充足,所以,不太可能一步到位把領域設計做的很完美。我們在整體項目規划的時候可能會有個大的架構設計、業務大圖(邊界思維),但是不可能達到領域設計的粒度,只能是一期一期的完善,到最后可能才會有完整的上面的目錄內容。每一期都需要考慮支持的場景約束、上下文、系統邊界、持續集成的相關設計。設計product, not project。