[英]How to use sagas in a CQRS architecture using DDD?
我正在使用DDD設計CQRS應用程序,我想知道如何實現以下場景:
Participant
聚合可以由多個ParticipantEntry
聚合引用 AddParticipantInfoCommand
,其中包含Participant
和一個ParticipantEntry
所有信息(類似於Order
和一個OrderLineItem
) 應該在哪里實施邏輯來檢查參與者是否已經存在以及是否不存在,創建參與者?
Participant
,如果沒有找到,請發出AddParticipantCommand
,然后發出包含Participant ID
的AddParticipantEntry
命令? 為了應對這種情況,你不一定需要傳奇。 看看我的博客文章,了解為什么不創建聚合根,以及做什么:
應該在哪里實施邏輯來檢查參與者是否已經存在以及是否不存在,創建參與者?
在大多數情況下,此行為應受參與者聚合本身的控制。
當您需要跨多個事務邊界協調更改時,進程非常有用。 但是,可以在同一事務中管理對同一聚合的兩個更改。
您可以將此實現為在同一聚合上運行的兩個不同的事務,並進行協調; 但是過程的額外復雜性並沒有帶來任何好處。 將單個命令發送到聚合更簡單,並允許它決定采取哪些操作來維護正確的不變量。
特別是Sagas是用於恢復多個交易的模式。 Yan Cui的Saga模式如何通過AWS Lambda和Step Functions管理失敗包括旅行預訂傳奇的一個很好的例證。
(注意:關於“saga”的定義存在相當大的混淆; NServiceBus社區傾向於理解這個術語與Garia-Molina和Salem最初描述的方式略有不同.kellabyte的Clarifying the Saga Pattern調查了混亂。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.