2012-10-12 45 views
0

讓我們假設我有它具有以下屬性同步功能地域實體變更使用CQRS

  • 名稱
  • IsPreferred

以CQRS中有一個基本的CustomerEntity最簡單的形式我會有以下服務

  • CustomerCommandService
  • CustomerQueryService

如果在CustomerCommandService我稱之爲UpgradeToPreferred(CustomerEntity)其背後的商店將更新和任何疑問將反映這一點。到現在爲止還挺好。

我的問題是如何將這個同步回到本地實體?我已經調用了不在實體上的服務的UpgradeToPreferred()方法,因此它不會反映在本地副本中,除非我查詢CustomerQueryService並獲得似乎有點多餘的更新。

..或者我做錯了嗎?

編輯:

澄清,問題是。如果我正在通過命令服務來修改存儲中的實體,而不是直接調用實體上的命令或編輯它的屬性,我應該如何處理對內存中實體的相同修改。

+0

你提到一家商店。你使用事件存儲來堅持你的'CustomerEntity'狀態嗎? – Marijn

+0

不,它只是一個簡單的數據存儲,就其應該是無關緊要的問題而言。 – deanvmc

回答

2

這裏幾件事情不對。您的指令服務需要一個命令,而不是一個實體。因此,如果您想要將該客戶升級爲首選,那麼該命令將成爲意圖(makecustomer_preferred)以及執行該命令所需的數據(客戶標識就足夠了)。該服務將使用標識加載實體,並調用實體上的優先行爲。該實體將在內部進行更改。持久性會將其映射回數據庫。 Ergo,不需要與數據庫重新同步。

+0

我讀了更多,我看到我在CQRS工作方式的假設中脫穎而出,歡呼! – deanvmc