把領域模型與業務邏輯分開,然後拿掉對基礎設施、使用者介面、甚至那些應用程式中非業務邏輯的直接依賴。把一個複雜的城市切割為不同層,在每個層中僅根據該階層本身的特性以及該層以下的各層,去考慮該層應該採用的設計模型。
By Eric Evans
在軟體架構中主要會有幾層 layer 再做不同的事情:
- 應用程式層 API 請求接收端
- 領域層 處理業務邏輯的地方
- 基礎設施層 呼叫外部 API或是連線 DB的地方
這種架構的關鍵的原則: 每一層只能跟自己或是位於下方的層耦合。
但分層的架構也有不同形態:
- 嚴格分層架構 (Strict Layers Architecture)
- 只允許對 直接下層 進行耦合
- 鬆散分層架構 (Relaxed Layers Architecture)
- 允許高層對 任何低層 進行耦合 (即: 應用層直接呼叫基礎設施層)
以下來定義下各層的 input/output
Layer | Receive Object | Return Object | Responsibility |
---|---|---|---|
應用程式層 | Request | Response | 路由的導轉 |
領域層 | Dto (Data Transfer Object) | Domain | 業務邏輯處理 |
基礎設施層 | Dto | Domain | 跟DB/API交互取得資料, 並將資料轉換成領域層看得懂的格式 |