在採用 CQRS 架構的專案中,常因混淆 Model、DTO、Command 三者職責,導致驗證屬性散亂、資料轉換邏輯混淆。本文整理筆者的實務心得,釐清三者定義與適用場景。
| 類型 | 定位 | 關聯層級 | 典型屬性/驗證 |
|---|---|---|---|
| Model (ViewModel) | UI 綁定模型,細粒度對應畫面欄位 | 強綁定 UI | DataAnnotation 驗證、Remote 驗證、UIHint、顯示名稱 |
| Command | 承載業務意圖的指令物件 | 業務行為導向,弱綁定 UI | 伺服端業務規則驗證、CommandBus 自動驗證 |
| DTO (Query DTO) | 資料傳輸物件,專供查詢/回傳使用 | 跨層傳輸,唯讀導向 | 無驗證屬性,單純資料承載 |

在 CQRS 讀寫分離模型中: