https://mp.weixin.qq.com/s/jMWuMuIvI1cFThC-WQGbHQ
設計領域模型的一般步驟如下:
1.根據(jù)需求劃分出初步的領域和限界上下文,以及上下文之間的關系喻杈;
2.進一步分析每個上下文內(nèi)部飒炎,識別出哪些是實體,哪些是值對象;
3.對實體瓶蝴、值對象進行關聯(lián)和聚合孝偎,劃分出聚合的范疇和聚合根;
4.為聚合根設計倉儲挤聘,并思考實體或值對象的創(chuàng)建方式轰枝;
在工程中實踐領域模型,并在實踐中檢驗模型的合理性组去,倒推模型中不足的地方并重構鞍陨。
如何創(chuàng)建好的聚合?
邊界內(nèi)的內(nèi)容具有一致性:在一個事務中只修改一個聚合實例从隆。如果你發(fā)現(xiàn)邊界內(nèi)很難接受強一致诚撵,不管是出于性能或產(chǎn)品需求的考慮,應該考慮剝離出獨立的聚合键闺,采用最終一致的方式寿烟。
設計小聚合:大部分的聚合都可以只包含根實體,而無需包含其他實體艾杏。即使一定要包含韧衣,可以考慮將其創(chuàng)建為值對象。
通過唯一標識來引用其他聚合或?qū)嶓w:當存在對象之間的關聯(lián)時购桑,建議引用其唯一標識而非引用其整體對象畅铭。如果是外部上下文中的實體,引用其唯一標識或?qū)⑿枰膶傩詷嬙熘祵ο蟆?/p>
如果聚合創(chuàng)建復雜勃蜘,推薦使用工廠方法來屏蔽內(nèi)部復雜的創(chuàng)建邏輯硕噩。
Cache Aside Pattern? ??
上文中,我們將領域行為封裝到領域?qū)ο笾戌怨保瑢①Y源管理行為封裝到資源庫中炉擅,將外部上下文的交互行為封裝到防腐層中辉懒。此時,我們再回過頭來看領域服務時谍失,能夠發(fā)現(xiàn)領域服務本身所承載的職責也就更加清晰了眶俩,即就是通過串聯(lián)領域?qū)ο蟆①Y源庫和防腐層等一系列領域內(nèi)的對象的行為快鱼,對其他上下文提供交互的接口颠印。