2014-07-06 50 views
0

我目前處於一種情況,我正在替換應用程序的域層,但必須保留現有的MVVM UI。我們絕對需要一個事件存儲,但我正在努力處理當前CQRS實現的某些方面。CQRS/ES更新彙總命令

我們有一些包含多個實體集合和鍵/值對動態屬性的複雜聚合。我們現有的用戶界面對這個聚合有一個大的編輯屏幕,我不知道如何構建更新的命令。

可能的解決方案: 1)簡單地在ViewModel中獲取聚合,根據域模型執行更新,然後使用命令(var command = new SaveAggregateCommand(myAggregate);)發運它。這感覺不對,因爲如果通過序列化邊界傳送此內部事件(沒有自定義序列化),內部事件將不會被保留。

2)創建一個複雜的命令對象,其中包含列表更新的屬性以及每個集合類型添加,更新和刪除的子實體的單獨列表。這對於命令處理程序來說是最簡單的,但感覺非常渺茫。

3)創建許多命令,這些命令基本上反映了捕獲的域模型的事件(在我的場景中最多有38個)。然後,視圖模型必須保存用戶按下保存按鈕時提交的未提交命令列表。像#2一樣,這也讓人感覺很不舒服。

由於此聚合的(必要的)複雜性,這些解決方案都沒有感覺正確。我會就這一點提供一些指導。

+0

這聽起來像一個超大的聚合。你能告訴我們關於AR的更多信息嗎?你爲什麼選擇ES?在這種情況下捕獲意圖是PITA,你能改變UI嗎? – JefClaes

+0

更改用戶界面必須晚點。這是一個商業決定。 AR中的一切都需要在那裏。它真的不能再被打破了。 – agartee

+1

您可以使用一個大的命令,並在應用程序層進行反向工程意圖。 – JefClaes

回答

0

所以,答案是:我做錯了。命令被分解成更易處理和具體的片斷,農民們歡欣鼓舞。

+0

你的聚合是否被分解爲?,所有這些命令是否在相同的聚合上運行? – Sudarshan

+0

是的,超級聚合體被分成3個聚合體。 – agartee