領域驅動設計DDD和CQRS架構模式落地實踐

Rickie發表於2021-08-01
在領域驅動架構中,通常會將查詢和命令操作分開,我們稱之為CQRS(命令查詢職責分離Command Query Responsibility Segregation)。這張圖是來自Martin Fowler大師的文章CQRS(https://www.martinfowler.com/bliki/CQRS.html)。
領域驅動設計DDD和CQRS架構模式落地實踐
上圖中讀模組Query Model和寫模組Command Model只是邏輯分離,物理層面還是使用了同一個資料庫。我們可以進一步將資料庫改成讀庫和寫庫做到物理分離,這時候就需要同步讀寫庫。
 
如果資料量不大,可以採用簡單的處理方式,物理層面還是使用一個資料庫,查詢的時候部分資料直接從資料庫讀取,部分資料使用到了Elasticsearch,資料同步可以採用兩種方案:
  • 當資料庫發生更改時,主動傳送領域事件(Domain Event)通知Elasticsearch進行更新,可以參考《COLA 4.x架構入門和專案實踐》技術專欄中的領域事件入門實踐部分的內容。
  • 直接監聽MySQL的binlog更新Elasticsearch。關於Elasticsearch的詳細使用,可以參考Elasticsearch 7.x從入門到精通》技術專欄。
 
COLA開源架構,就是基於DDD領域建模思想、DDD分層架構和CQRS架構,可以幫助開發人員快速落地DDD應用專案。
領域驅動設計DDD和CQRS架構模式落地實踐
《COLA 4.x架構入門和專案實踐》技術專欄首先介紹了COLA框架的使用入門,以及與IDEA開發工具的整合等等;然後基於COLA架構,建立DDD經典示例專案-貨物運輸系統,詳細介紹了DDD領域建模、適配層、應用層、領域層和基礎設施層的程式碼開發、防腐層(ACL)設計與實現、領域事件(Domain Event)建模和落地實踐、以及基於Kafka訊息中介軟體的訊息釋出和訂閱等等。內容由淺入深,從開發實戰出發,逐步掌握基於COLA架構和DDD領域建模思想構建複雜業務應用系統。
 

相關文章