領域驅動設計之體系架構模式交互過程與最佳實踐

上一文主要講了DDD體系架構以及每一層主要的做用,這篇主要描述各層之間如何進行交互,以及交互的最佳實現方式。數據庫

1.應用層某個應用層服務被界面層調用,開始啓動。架構

2.對於須要新增領域對象的狀況,應用層調用領域層中某個領域對象(聚合根)的構造函數或工廠建立出領域對象,而後調用領域對象的某些方法進行相關的業務操做,操做完成後,應用層服務將新建立的領域對象添加到倉儲中。函數

3.對於須要修改領域對象的狀況,應用層服務經過倉儲獲取領域對象,而後調用領域對象的某些方法進行相關的業務操做,操做完成後,應用層服務將新修改的領域對象添加到倉儲中。設計

4.若是一個操做設計到多個領域對象,則應用層服務調用領域層的某個領域服務完成操做。對象

5.最後通知工做單元將倉儲中的領域對象以事務的方式持久化到數據庫中。接口

 

在實際的開發經驗中,有如下幾點須要特別說明:事務

1.通常經過應用層訪問倉儲,並且是使用領域層定義的倉儲接口,具體倉儲的實現調用能夠經過IOC的機制在應用層經過服務定位器模式找到。開發

2.通常不要再領域層訪問倉儲,若是領域層中的領域對象或領域服務的業務邏輯處理確實須要訪問倉儲,建議不經過服務定位器的方式在領域層進行服務解析,而是應該在領域對象或領域服務的構造函數中傳入倉儲接口,具體是哪一個倉儲實現仍然在應用層經過服務定位器模式找到,這樣可以保證領域層只關注業務,而不關注其餘的方面。構造函數

3.一些界面須要獲取的查詢信息,不該該經過領域對象直接返回給應用層服務,而後應用層服務返回給界面。一般界面須要的信息可能來源於領域對象的一部分狀態,也有可能來源於多個領域對象的組合,這時應該在應用層實現DTO。DTO定義的就是界面所須要顯示的狀態,應用層服務應該可以將DTO與領域對象間做映射、組合或轉換,以更好的實現界面信息的展現。方法

 

歡迎加入QQ討論羣:309287205

相關文章
相關標籤/搜索