cqrs-implementation 是做什麼的?
實作命令查詢責任隔離以實現可擴展架構。適用於分離讀寫模型、優化查詢效能或建構事件溯源系統。
概述
此技能引導開發者遵循 CQRS 模式,將命令(寫入)與查詢(讀取)作業分離至不同的模型與資料儲存。透過解除讀寫操作的耦合,系統可針對擴展性與效能進行獨立最佳化。
使用時機
- 應用程式面臨讀寫流量不對稱的問題(例如:大量讀取、少量寫入)。
- 需要為查詢與命令分別調整資料結構與索引策略。
- 在建構事件溯源系統時,需要將狀態變更儲存為事件序列。
- 團隊希望採用領域驅動設計(DDD)與有界上下文(Bounded Context)來劃分複雜業務邏輯。
支援平台
- Claude Code:可透過自然語言提示直接呼叫此技能。
- Cursor:使用
.cursorrules或SKILL.md整合此技能。 - Codex CLI:將此技能中的指令嵌入專案說明檔案(如
README.md)。 - 其他 AI 代理:只要支援自訂指令或 skill 定義,即可匯入使用。
技能運作方式
- 分析需求:技能會先解析使用者輸入的系統需求(例如:資料流量、領域事件)。
- 產生架構範本:根據分析結果,輸出 CQRS 的基本程式碼結構,包括命令處理器、查詢處理器、事件儲存及讀取模型。
- 配置資料儲存:提供命令資料庫(通常為關聯式或事件儲存)與查詢資料庫(可優化為 NoSQL 或記憶體快取)的連線設定範例。
- 整合事件匯流排:設定訊息佇列(如 RabbitMQ、Kafka)以處理領域事件的非同步發佈與訂閱。
- 提供最佳實務:包含命名慣例、交易邊界、最終一致性注意事項及錯誤處理策略。
範例流程
# 初始化 CQRS 專案結構
skill init cqrs --domain=Order
此命令會產生:
commands/:包含CreateOrderCommand、UpdateOrderCommand等類別。queries/:包含GetOrderQuery、ListOrdersQuery等類別。events/:定義OrderCreated、OrderUpdated等領域事件。read-models/:實作針對查詢最佳化的資料視圖。infrastructure/:提供事件匯流排、資料庫連線與 Repositories 的基礎設施程式碼。
環境變數
| 變數名稱 | 說明 | 預設值 |
|---|---|---|
COMMAND_DB_URL | 命令資料庫連線字串 | postgresql://localhost:5432/cqrs_commands |
QUERY_DB_URL | 查詢資料庫連線字串 | mongodb://localhost:27017/cqrs_queries |
EVENT_BUS_TYPE | 事件匯流排類型(kafka/rabbitmq) | rabbitmq |
EVENT_STORE_CONNECTION | 事件儲存連線字串 | postgresql://localhost:5432/event_store |
注意:請根據部署環境調整上述連線資訊。