1. DDD整體結構分爲四層:
- Infrastructure(基礎實施層)
- Domain(領域層)
- Application(應用層)
- Interfaces(表示層,也叫用戶界面層或是接口層),各個層面的做用下面介紹。
2. DDD: application 應用層
- 相對於領域層,應用層是很薄的一層,應用層定義了軟件要完成的任務,要儘可能簡單.
- 它不包含任務業務規則或知識, 爲下一層的領域對象協助任務、委託工做。
- 它沒有反映業務狀況的狀態,但它能夠具備反映用戶或程序的某個任務的進展狀態。
- 對外爲展示層提供各類應用功能(service)。
- 對內調用領域層(領域對象或領域服務)完成各類業務邏輯任務(task)。
- 這一層也很適合寫一些任務處理,日誌監控
3. DDD: domain 領域層
領域層主要負責表達業務概念,業務狀態信息和業務規則。 Domain層是整個系統的核心層,幾乎所有的業務邏輯會在該層實現。git
領域模型層主要包含如下的內容:github
- 實體(Entities):具備惟一標識的對象
- 值對象(Value Objects): 無需惟一標識的對象
- 領域服務(Domain Services): 一些行爲沒法歸類到實體對象或值對象上,本質是一些操做,而非事物
- 聚合/聚合根(Aggregates,Aggregate Roots): 聚合是指一組具備內聚關係的相關對象的集合,每一個聚合都有一個root和boundary
- 工廠(Factories): 建立複雜對象,隱藏建立細節
- 倉儲(Repository): 提供查找和持久化對象的方法
4. DDD: infrastructure 基礎實施層
最底層(但與全部層進行交互) 向其餘層提供 通用的 技術能力(好比工具類,第三方庫類支持,經常使用基本配置,數據訪問底層實現)面試
基礎實施層主要包含如下的內容:算法
- 爲應用層 傳遞消息(好比通知)
- 爲領域層 提供持久化機制(最底層的實現)
- 爲用戶界面層 提供組件配置
- 基礎設施層還可以經過架構框架來支持四個層次間的交互模式。
5. DDD: interfaces 用戶界面層(或表示層)
最頂層 請求應用層以獲取用戶所須要展示的數據(好比獲取首頁的商品數據) 發送命令給應用層要求其執行某個用戶命令(實現某個業務邏輯,好比用戶要進行轉帳)編程
用戶界面層應該包含如下的內容:微信
- 數據傳輸對象(Data Transfer Object): DTO也常被稱做值對象,VO,實質上與領域層的VO並不相同
- DTO是數據傳輸的載體,內部不該該存在任何業務邏輯,經過DTO把內部的領域對象與外界隔離。
- 裝配(Assembler): 實現DTO與領域對象之間的相互轉換,數據交換,所以Assembler幾乎老是同DTO一塊兒出現。
- 表面,門面(Facade): Façade的用意在於爲遠程客戶端提供粗粒度的調用接口
- 它的主要工做就是將一個用戶請求委派給一個或多個Service進行處理,也就是咱們常說的Controller。
文末
歡迎關注我的微信公衆號:Coder編程 歡迎關注Coder編程公衆號,主要分享數據結構與算法、Java相關知識體系、框架知識及原理、Spring全家桶、微服務項目實戰、DevOps實踐之路、每日一篇互聯網大廠面試或筆試題以及PMP項目管理知識等。更多精彩內容正在路上~ 也分享一些雜文~數據結構
文章收錄至 Github: github.com/CoderMerlin… Gitee: gitee.com/573059382/c… 歡迎關注並star~ 架構
dd