CQRS 意味着命令和查詢的責任是分離的。很多人錯誤的認爲CQRS是一個整體架構,其實,CQRS這個一個小的模式,這個模式由Greg Young和Udi Dahan首次提出. 他們從Bertrand Meyer的《Object Oriented Software Construction》中獲取的命令和查詢分離模式的靈感。在CQS背後的主要觀點是:"一個方法應該改變一個對象的狀態,或者返回一個結果,但不是二者兼具。換句話說,問一個問題不應該改變問題的答案,更正式的,一個方法只有被引用透明(referentially transparent)並且沒有任何副作用的時候纔會有返回一個值。
正因如此,我們把方法劃分爲兩種:
Commands - 改變一個對象或整個系統的狀態
Queries - 在不改變對象的狀態的情況下返回結果
在現實中,可以很簡單講清楚什麼是什麼。Queries會聲明返回類型,commands沒有返回值. 這種模式是普遍適用的,它會讓對象更加簡單。換句話講,CQRS只適用於解決特定問題.
很多應用程序使用主流讀和寫來構建對象的方法。對於同一個模型(model)用讀和寫會造成model更加複雜,維護和優化都非常困難。
這兩種模式的真正策略是你可以將修改狀態和不修改狀態的方法分離開,這種分離可能造成在處理性能和調優時變得困難,你可以在寫的部分來優化系統中被分開用做讀的部分,寫的部分是已知的領域,這個領域包含所有的行爲,讀的部分被指定爲報表提供服務。
這種模式在一個很大的應用程序的另外的一個好處是,你可以將開發人員分配到更小的團隊中去完成這個系統的不同任務(只完成讀或寫),而不用關心其他的任務。例如,開發讀部分的人員不需要明白領域模型。
查看原文:Kanasz Robert