我最近開始調查我即將開始的綠色野外項目的CQRS和DDD。我研究了Udi Dahan,Greg Young,Mark Nijhof等人提供的大量材料。這些非常有幫助,我認爲我對這些概念有很好的理解。但是,我仍然在想如何將這些應用於我自己的領域。CQRS - 如何建立場景執行系統的模型
我的系統基本上是一個複雜的規則引擎 - 規則將決定某些產品的最終價格。產品定義和規則將由管理員輸入到系統中。規則將由管理員使用預定義的一組屬性來設計,這些屬性可以具有預定義集合中的值,例如'購買目的'(轉售,出租)或自由格式值,如年齡。
每個產品都有一個基準價格,如果適用,規則基本上會從基準價格中增加/刪除。
一個非常簡單的示例規則可能是:
對於產品X,IF(購買目的=經銷和年齡> 25)加$ 25到基準價。
所以有兩種用戶使用系統,管理員,誰定義產品,規則和基價;以及基於他們通過假設用戶界面輸入的場景查詢定價的其他用戶。
我的困惑在於:運行場景根本不會改變域的狀態,沒有其他外部系統/人員對場景執行的結果感興趣,但是正在運行的用戶本人 - 它返回在運行給定方案的適用規則後進行價格計算的結果。例如,用戶可以選擇產品X並查詢給定業務情景的定價,如(採購目的=轉售和年齡= 40)。再一次,因爲這個操作根本不會改變域的狀態,所以我猜這是一個查詢。但是,在場景中有一個規則引擎用於計算最終價格,我猜可以將其劃分爲正在運行的域邏輯。那麼 - 這個邏輯屬於哪裏?這是一個只讀模型的查詢,還是運行一個需要在域模型中運行的命令的場景?同樣,感覺像域層是這些規則的地方,但是如何將場景執行的結果傳遞給用戶(就像查詢以這種方式思考的那樣)。或者,也許CQRS不是解決這個問題的正確方案?
+1告訴我,有一個[cqrs](http://blog.fossmo.net/post/Command-and-Query-Responsibility-Segregation-%28CQRS%29.aspx)模式,我從來沒有聽說過之前。 – k3b 2011-01-15 14:49:47