大圖:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL3FFRNlXSU5keNpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL3kjM4EDM1UTM0ADNwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
1、interface(使用者界面層)
DTO資料傳輸對象(Data Transfer Object)
DTO是資料傳輸的載體,内部不應該存在任何業務邏輯,通過DTO把内部的領域對象與外界隔離
Assembler(裝配)
實作DTO與領域對象之間的互相轉換,資料交換
Facade(門面)
Facade的用意在于為遠端用戶端提供粗粒度的調用接口,他的主要工作就是将一個使用者請求委托給一個或者多個Service進行處理,也就是我們常說的Controller
2、infrastructure(基礎實施層)
向其他層提供通用的技術能力(比如工具類,第三方庫類支援,常用基本配置,資料通路底層實作)
為應用層,傳遞消息(比如通知)
為領域層 提供持久化機制(最底層的實作)
為使用者界面層 提供元件配置
3、application(應用層)
相對于領域層,應用層是很薄的一層,應用層定義了軟體要完成的任務,要盡量簡單
對外 未展現層提供各種應用功能(service)
對内 調用領域層完成各種業務邏輯任務(task) 這一層也很适合寫一些任務處理,日志監控
4、Domain(領域層)
實體
具有唯一辨別的對象 比如:使用者(User)包含使用者id,姓名,年齡,位址
值對象
無需唯一辨別的對象 比如:位址對象(包含省份,城市,街道等)
領域服務
一些行為無法歸類到實體對象或值對象上,本質是一些操作,而非事物
聚合、聚合根
聚合是指一組具有内聚關系的相關對象的集合,每個聚合都有一個root和boundary
工廠
建立複雜對象,隐藏建立細節
倉儲
提供查找和持久化對象的方法