Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Domain driven design 如何在使用DDD的CQRS体系结构中使用sagas?_Domain Driven Design_Cqrs_Nservicebus Sagas - Fatal编程技术网

Domain driven design 如何在使用DDD的CQRS体系结构中使用sagas?

Domain driven design 如何在使用DDD的CQRS体系结构中使用sagas?,domain-driven-design,cqrs,nservicebus-sagas,Domain Driven Design,Cqrs,Nservicebus Sagas,我正在使用DDD设计一个CQRS应用程序,我想知道如何实现以下场景: 一个参与者聚合可以被多个参与者内容聚合引用 向命令端发出一个addparticipantfocommand,其中包含Participant的所有信息和一个participantinetry(类似于一个Order和一个OrderLineItem) 应该在何处实现逻辑来检查参与者是否已经存在,如果不存在,则创建参与者 是否应该在先检查域模型中是否存在参与者,如果没有找到,则发出AddParticipantCommand,然后

我正在使用DDD设计一个CQRS应用程序,我想知道如何实现以下场景:

  • 一个
    参与者
    聚合可以被多个
    参与者内容
    聚合引用
  • 向命令端发出一个
    addparticipantfocommand
    ,其中包含
    Participant
    的所有信息和一个
    participantinetry
    (类似于一个
    Order
    和一个
    OrderLineItem
应该在何处实现逻辑来检查参与者是否已经存在,如果不存在,则创建参与者

  • 是否应该在先检查域模型中是否存在
    参与者
    ,如果没有找到,则发出
    AddParticipantCommand
    ,然后发出
    addparticipantry
    命令,其中包含
    参与者ID
  • 这应该完全由域模型本身中的AggregateRoot完成吗
应该在何处实现逻辑来检查参与者是否已经存在,如果不存在,则创建参与者

在大多数情况下,这种行为应该由参与者聚合本身控制

当您需要跨多个事务边界协调更改时,流程非常有用。但是,对同一聚合的两个更改可以在同一事务中管理

您可以将其实现为在同一聚合上运行的两个不同事务,并进行协调;但过程的额外复杂性并没有带来任何好处。将单个命令发送到聚合并允许它决定要采取哪些操作来维护正确的不变量要简单得多

特别是,Sagas是一种恢复多个事务的模式。严翠的作品很好地说明了一个旅游预订传奇

(注:关于“传奇”的定义存在相当大的混淆;NServiceBus社区对该术语的理解方式与kellabyte调查中最初描述的稍有不同。)

应该在何处实现逻辑来检查参与者是否已经存在,如果不存在,则创建参与者

在大多数情况下,这种行为应该由参与者聚合本身控制

当您需要跨多个事务边界协调更改时,流程非常有用。但是,对同一聚合的两个更改可以在同一事务中管理

您可以将其实现为在同一聚合上运行的两个不同事务,并进行协调;但过程的额外复杂性并没有带来任何好处。将单个命令发送到聚合并允许它决定要采取哪些操作来维护正确的不变量要简单得多

特别是,Sagas是一种恢复多个事务的模式。严翠的作品很好地说明了一个旅游预订传奇


(注意:关于“saga”的定义存在相当大的混淆;NServiceBus社区对该术语的理解方式与.kellabyte的调查中最初描述的稍有不同。)

处理这种情况不一定需要saga。请看我的博客文章,其中介绍了为什么不创建聚合根,以及如何取而代之:


处理这种情况不一定需要传奇故事。请看我的博客文章,其中介绍了为什么不创建聚合根,以及如何取而代之:


“一个参与者聚合可以与多个参与者聚合关联”-你的意思是什么?它们是如何关联的?凭身份证?什么代表这种“关联”?如果在
较短的
时间段内添加重复参与者,会发生什么情况?对业务的影响是什么?人工重试或取消命令是可以接受的?一个参与者可以被多个Participatentry聚合引用(就像一个订单有多个OrderItems)。我编辑了这篇文章。你能告诉我更多关于这个域名的信息吗
Participatentry
Participatent
在域业务方面似乎没有关联。“一个参与者聚合可以与多个Participatentry聚合关联”-你的意思是什么?它们是如何关联的?凭身份证?什么代表这种“关联”?如果在
较短的
时间段内添加重复参与者,会发生什么情况?对业务的影响是什么?人工重试或取消命令是可以接受的?一个参与者可以被多个Participatentry聚合引用(就像一个订单有多个OrderItems)。我编辑了这篇文章。你能告诉我更多关于这个域名的信息吗
Participatentry
Participatent
似乎与域业务无关。因此,实际上,应该创建依赖实体的是域模型本身,而不是命令处理程序(或博客文章中所述的服务层)。谢谢你给我指明了正确的方向!因此,实际上,应该是域模型本身创建依赖实体,而不是命令处理程序(或博客文章中所述的服务层)。谢谢你给我指明了正确的方向!