本書涵蓋的主題#

CQRS 模式在領域驅動設計(Domain Driven Design)的理論中已廣為人知,但在實際應用於軟體專案時,仍存在許多誤解與困惑:

  • 是否應該搭配 Event Sourcing 使用?
  • 是否一定要為讀取和寫入建立獨立的資料庫?
  • 讀寫之間的同步機制該如何設計?

本書將逐一解答這些問題。

CQRS 整體架構:Client 透過 Write API 與 Read API 分別存取 Domain Model 和 Read Queries,資料庫間透過 Sync 同步

你將學到什麼#

  • CQRS 的定義、背後原理,以及它能為專案帶來的具體效益
  • 常見的誤解與反模式
  • 透過一個貼近真實世界的範例專案,逐步實作 CQRS 模式

各模組概覽#

  1. Introduction — CQRS 的定義、起源與核心效益
  2. Introducing a Sample Project — 介紹一個未使用 CQRS 的線上學生管理系統,分析 CRUD 式 API 的缺點
  3. Refactoring Towards Task-based Interface — 從 CRUD 介面重構為 Task-based 介面
  4. Segregating Commands and Queries — 引入兩個模型,將 Command 與 Query 分離,簡化 Domain Model
  5. Implementing Decorators — 實作 Command 與 Query Handler 的 Decorator 模式
  6. Simplifying the Read Model — 繞過 Domain Model 與 ORM,直接從資料庫讀取以優化效能
  7. Introducing a Separate Database for Queries — 為查詢引入獨立的資料庫
  8. Synchronizing the Commands and Queries Databases — 實作兩個資料庫之間的同步機制
  9. CQRS Best Practices and Misconceptions — 最佳實踐與常見誤解

閱讀本書前,建議具備 Java 程式語言與**領域驅動設計(DDD)**的基礎知識。