CQRS命令查詢職責分離模式
簡介
本書一步一步帶著讀者認識CQRS模式,讀者會在過程中瞭解到CQRS模式能藉由分離API接點、命令與查詢、領域模型、資料庫來幫助簡化程式的實作,並進一步提高效能與擴充性。
各章目標
書中前三章先說明CQRS模式以及提供一個傳統的CRUD服務,接著再示範如何將其拆解為任務型為主的API,以使用者要達成什麼任務的觀點去設計服務。
第四章將按照CQRS思維引入命令、查詢、事件等觀念,並重新解釋其與DDD、CTO之間的關係,本章的重點是將會改變應用程式狀態的API以及單純的查詢API做出區隔,還有把處理命令、查詢的責任從物件轉交給處理器。
第五章承接前一章,目的是在示範基於處理器的實作可以很容易透過包裝來對應需求變更,並解釋了為何不應該在處理命令的實作中再次發出命令。
第六章則說明了查詢介面可以不屬於領域模型的理由,然後提出在查詢專有服務中直接用SQL語法取代ORM的最佳化作法。
第七八章承接前一章,更進一步分離出查詢專用的資料庫,以及使用反正規劃來簡化查詢模型。然而分離資料庫有其成本壓力,可貴的是本書還解釋了CAP理論以及最終一致性來幫助讀者做出設計決策。有了對自己服務的需求分析,讀者就能從基於狀態或事件這兩種資料庫同步方案中做出選擇。
第九章在最後回答了一些常見問題,比方說CQRS與Event Sourcing、規格模式之間的關係。其中最重要的就是實作CQRS前的建議,根據服務需不需要維護、是否需要立即一致性、是否需要追溯紀錄來建議不同的實作程度。
心得
本書除了介紹與示範CQRS模式之外,我認為也是一本複習DDD、Event Sourcing的好教材。另外一般這種設計模式的書通常都只會講它們自己的優點,然而本書卻毫不掩飾該模式弱勢的部分,還進一步根據不同狀況提供給讀者基本的判斷標準,真的是很紮實的最佳實踐參考書。