2012-07-10 70 views
2

最近,我讀了很多關於CQRS,對我來說好像它緊密聯繫起來,以事件採購。CQRS與事件採購緊密相連嗎?

但是像這個回答說https://stackoverflow.com/a/9217461/277067 對我來說事件SOURING似乎有點太複雜/可怕的像我這樣的初學者(「什麼?我的對象目前的狀態被存儲在任何地方?」)。

所以我想知道他們是否確實被捆綁起來,或者是否有任何工具/名氣會幫助做cqrs(事件觀察者,命令處理程序)而沒有事件採購的複雜部分。

感謝

+1

http://codebetter.com/gregyoung/2010/02/16/cqrs-task-based-uis-event-sourcing-agh/ - tl; dr:他們沒有被束縛。你也不需要工具。 – 2012-07-10 16:33:53

回答

1

簡短的回答:沒有,CQRS和事件採購是不依賴於對方。不,CQRS和事件源不相互關聯,並且它們與域驅動設計(DDD)並不緊密結合。

如果你想用幾句話來定義CQRS,事件源和DDD是什麼,你可以拿出解釋如下(當然,它們是過度簡化的,但這正是這裏的要點):

  • CQRS是一種將寫入狀態與讀取狀態(命令vs查詢)分開的設計模式。
  • 事件外包是將數據存儲在數據庫中,其中增量存儲,而不是實際狀態的方式。
  • DDD是讓域上的跨學科團隊中更容易溝通的方法。

他們每個人的作品,未經他人很好。例如,您可以使用DDD對域進行建模,然後在不使用CQRS或事件源的情況下實施它。您也可以在不需要DDD或CQRS的情況下進行事件採購。等等...

不過:這三個概念發揮得很好在一起,這就是爲什麼他們往往是一個簡單的句子內召集。所以,不,他們沒有彼此綁在一起,但他們相互結合很有意義。

下圖顯示它們如何彼此交互:

CQRS, event-sourcing and DDD in combination

(該圖像被從documentation of wolkenkit,爲JavaScript和Node.js的一個CQRS和事件採購框架截取)

  • CQRS描述了您向寫模型發送命令,並且您接收事件並訂閱來自讀取模型的查詢。
  • 事件採購用於與寫模型來存儲發佈爲客戶端發送的命令結果的事件。
  • 在寫入模型中使用DDD將命令轉換爲事件並運行適當的邏輯。
1

您可以使用CQRS沒有事件採購。在命令處理程序中,您正在使用某個存儲庫來獲取或保存聚合根的最後狀態。只需實現簡單的存儲庫,這將直接從數據庫保存和加載狀態。

0

不,他們都沒有太大的關係IMO,你可以找到我的理由,以一個相關的問題here

0

在一個簡短的答案中,我應該說:我們可以沒有事件採購的CQRS。但沒有CQRS我們就不能進行事件採購。總的來說,我們有3種CQRS:標準,事件採購和最終一致性。