CQRS, Command Query Responsibility Segregation
讓「寫得複雜、讀得很快」同時成立
在傳統 CRUD 中同一套模型要負責寫入、查詢
但是很容易遇到需求污染、查詢效能受限於交易設計且擴展困難
Client
├─ Command → Write Model → Write DB
│ └─ Event → Read Model
└─ Query → Read DB → Response
- Client 發 Command → Command Handler 驗證與執行
- 寫入 Write DB(可同時寫 Event Store)
- 發布事件 → 非同步更新 Read Model
- Client 發 Query → Query Handler 直接查 Read DB
✅ 適合:
- 高讀取比例(Dashboard、搜尋、報表)
- 複雜商業規則
- 需要水平擴展
❌ 不適合:
- 小型 CRUD
- 強一致性要求極高(例如銀行即時餘額)