2011-07-21 24 views
1

我開始使用CQRS,並認爲在我的窗體上使用Command對象作爲模型是最有意義的。我可以利用一些客戶端驗證的命令使用DataAnnotations,客戶端驗證,使它很乾淨...CQRS命令作爲POST動作的模型

我的問題......這是否會引發任何問題?如果我的命令沒有默認構造函數,這是否會使這個過程變得不可能?我是否需要創建自己的CommandModelBinder,它可以通過構造函數注入聚合ID?

你的想法,我找不到這個技術,我假設因爲它不工作。

回答

3

使用POST將命令發送到域命令處理程序似乎是明智的。但它不太可能是你綁定你的接口的確切對象。界面中的命令(例如鼠標點擊)將成爲域命令(創建用戶)。您的GUI最有可能被綁定到查詢的結果。

2

由於您提到的原因,您將創建視圖模型,這基本上是您的dto在客戶端和服務器之間發送的。這樣,您可以使用所有mvc善良,如模型綁定,數據註釋等。在您的控制器中,您將創建命令並將命令發送到服務總線。

我認爲這會幫助您更好地區分疑慮,並且在我看來這將更容易進行測試。

5

我建議您在基於任務的UI上看看Greg Young的article關於DTO和消息如何與您的系統(客戶端和服務器端)進行交互的信息。

我同意塞巴斯蒂安的觀點,你的命令將完全匹配你的用戶界面。因此,您可能需要具有單獨的DTO/Model類和命令。這真的不是什麼壞事,因爲你的模型真的是你係統查詢的結果,並且不應該是你發送到系統中的消息的完全重複。另外,通過保持命令與模型分離,對Command構造函數的關注也隨之消失。你的控制器只收集來自客戶端的信息,構建命令並提交它。

如果您開始使用CQRS,Greg的網站(cqrsinfo.com)非常好,特別是他的6 1/2 hours video。是的,這是6個半小時,但它真的是一個很好的介紹和概述CQRS的全部內容。它幫了我很大的忙。

希望這會有所幫助!

+1

用於引用Greg的文章+1 –