基礎架構圖
- Adapter 適配層:對前端展示的路由和適配。
VO:返回給前端的對象
assembler:將 responseDTO 轉換為 VO
web:處理頁面請求的 Controller
wap:處理手機端請求的 Controller - Application 應用層:負責獲取輸入,組裝上下文,調用領域層做業務流程編排,如果需要的話,發送消息通知等。若只是簡單操作,應用層還可直接繞過領域層,訪問基礎層。避免在 Application 層做入參校驗,可以通過 JSR303/380 和 Spring Validation 來前置校驗。如何判斷是否屬於業務流程:不要有 if/else 分支邏輯,除非是 if 條件對象判空返回或者拋異常終止。
DTO:數據轉換對象,只是為了和外部交互,所以本身不包含任何邏輯,屬於貧血對象,包括 req 請求 DTO 和 res 響應 DTO
converter:實現 dto 與 model 之間轉換或 dto 與 po 之間轉換
consumer:處理外部消息通知,比如 MQ 消息
executor:處理 request,包括 command 和 query 兩種(一般可用 CmdExe 表示)
scheduler:處理定時任務
rpc:實現 Client 中供外部調用的 Facade 接口,FacadeImpl - Client:封裝 sdk 供外部調用
api:供外部調用的 Facade 接口
DTO:供外部使用的接口對應的 DTO
enums:枚舉類 - Domain 領域層:封裝核心業務邏輯,並通過領域服務(Domain Service)和領域對象(Domain Entity)向 App 層提供業務邏輯計算和業務實體。領域是應用的核心,不依賴其他任何層次。
model:領域模型,包含數據和行為
gateway:領域網關,與外部解耦利器
ability:領域能力,包括 DomainService,當某個行為影響到多個 Entity 時,屬於跨實體的業務邏輯,在這種情況下就需要 DomainService 來完成,即業務需要涉及到多個 gateway - Infrastructure 基礎實施層:處理技術細節,比如數據庫 CRUD、搜索引擎、文件系統等,領域防腐的重任也落在這層,通過調用外部接口獲取到的外部對象轉換為實際 Domain 層所定義的對象模型,從而不直接使用外部對象。
PO:與數據庫表一一映射關系,每個字段對應數據庫表的一個 column,PO 只有數據,沒有行為
factory:model 與 po 之間轉換
mapper:數據庫映射,持久化操作
common:工具包
gatewayImpl:網關實現