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