CQRS命令查詢職責分離
CQRS(Command Query Responsibility Segregation)命令查詢職責分離 命令:對系統產生【影響】,但無結果 查詢:對系統【不】產生【影響】,但有結果
查詢
boolean isExist= File.exist(File);
命令
File.write("寫檔案");

目的
改善效能、擴充性、簡化
一般功能特性,多讀少寫。
改善效能:讀寫模型分離,讀模型降低框架使用,讀與寫不同資料庫,讀取資料擴可進行擴充,或是否是不同 連線方式 ,讀取使用JDBC原生程式,寫入使用ORM連線方式。
簡化:資料異動資料表與查詢資料表不同。
命令模型資料:學生、課程
Table
Column1
Column 2
課程
課程編號
分數
學生
姓名
學號
查詢模型資料表(每個學生最多兩個課程)
Table
Column1
Column 2
Column 3
Column 4
Column 5
Column 6
學生projection
姓名
學號
課程編號1
分數1
課程編號2
分數2
DDD
命令EditPersonalInfoCommand
查詢GetListQuery
事件PersonalInfoChangedEvent
缺點:資料維護成為最大成本
投影:讀取資料模型與存取資料模型資料同步
事件驅動
領域事件變更:
訂閱追蹤領域事件(Event sourcing)
狀態驅動(透過狀態變更監聽 如:Hibernate :Event Listener)
同步:反應速度快、增加處理時間、不容易拓展
非同步:不會發生【阻斷】情況
範例
Last updated
Was this helpful?