Domain driven design CQRS&;事件源是一种处理需要生成多个命令的单个请求的方法

Domain driven design CQRS&;事件源是一种处理需要生成多个命令的单个请求的方法,domain-driven-design,cqrs,event-sourcing,Domain Driven Design,Cqrs,Event Sourcing,我正在做一个家谱应用程序,因为我正试图学习事件来源和CQR。我的应用程序中有三个聚合:PersonAggregate、FactAggregate、FamilyAggregate。 我从UI向服务器提出的向某人添加配偶的请求是: { personId: "", // And Existing Person in the DB personInput: {name: "Bob", birthDate: ""} // Input to

我正在做一个家谱应用程序,因为我正试图学习事件来源和CQR。我的应用程序中有三个聚合:PersonAggregate、FactAggregate、FamilyAggregate。 我从UI向服务器提出的向某人添加配偶的请求是:

{
  personId: "", // And Existing Person in the DB
  personInput: {name: "Bob", birthDate: ""} // Input to create a new person in the DB
}
My Family Aggregate收听Personalggregate的
PersonCreated
事件,以记录已创建的所有人

用户界面调用Personalggregate来创建该人(其相关数据需要在两人之间创建伙伴关系,而不是调用FamilyAggregate),然后在
PersonCreated
事件上放置FamilyAggregate需要知道的数据以将两人添加为配偶,这是一个好的架构吗?或者这是一个糟糕的设计,因为现在事件中有命令数据


创建人员时,人员聚合还需要向FactAggregate发送数据,以创建有关人员出生日期的事实。

需要在单个事务中更新多个聚合是聚合边界错误的标志。因为根据定义,聚合负责保护事务边界。单个事件对应于单个事务

让我们考虑一下这个案例是如何在非计算机世界中处理的。那里的商业领域设计得很好。经过几个世纪的磨砺,它变得更加坚固和简单

决定的重点不是一个人或一个家庭。这是教堂。公制帐簿是总和。当牧师做出决定时,他会把决定写在一本度量衡簿上。其他一切——人的文件、家谱、人的事实清单——都只是登记范围内的阅读模型


它们可以在其他有界上下文中聚合。在原始事务完成并写入事件后,某些服务可能会侦听注册事件并更新相关实体。最终。

需要在单个事务中更新多个聚合是聚合边界错误的标志。因为根据定义,聚合负责保护事务边界。单个事件对应于单个事务

让我们考虑一下这个案例是如何在非计算机世界中处理的。那里的商业领域设计得很好。经过几个世纪的磨砺,它变得更加坚固和简单

决定的重点不是一个人或一个家庭。这是教堂。公制帐簿是总和。当牧师做出决定时,他会把决定写在一本度量衡簿上。其他一切——人的文件、家谱、人的事实清单——都只是登记范围内的阅读模型


它们可以在其他有界上下文中聚合。在原始事务完成并写入事件后,某些服务可能会侦听注册事件并更新相关实体。最终。

因此,在这个例子中,可能会有一个测量服务被调用并记录结婚登记或新人登记。然后Person服务会监听并记录它需要的数据,一个家庭会监听一个登记的结婚记录,以记录这两个人是否结婚?是的,类似这样的事情。可能是被赋予和被赋予的。然后,家谱服务可以将数据存储在图形表示中,并有效地回答有关个人家谱的查询。那么Person服务会回答什么问题呢?另一个问题是:牧师在做记录之前对数据的确认是什么?也就是说,应该验证什么。可能在家谱服务中,可以检查一个人只能添加与他有关的人的记录……但这是否意味着测量服务必须验证传入的出生和死亡事件是否有效?或者PersonName的输入是否有效?什么时候应该分别在人与事实的界限内?什么是有效的出生事件?无论如何,这件事应该是一个人存在的开始。至于死亡事件——可以证实的是,只有出生的人死了。不允许为此人举办其他活动。然后,任何人(或任何人的生活事实)都可以从这些记录中重建。一个人可以通过全名、出生日期和地点来识别。Metrical服务还可以验证重复的出生事件。因此,在这个示例中,可能会有一个Metrical服务被调用并记录结婚登记或NewPersonRegSiteed。然后Person服务会监听并记录它需要的数据,一个家庭会监听一个登记的结婚记录,以记录这两个人是否结婚?是的,类似这样的事情。可能是被赋予和被赋予的。然后,家谱服务可以将数据存储在图形表示中,并有效地回答有关个人家谱的查询。那么Person服务会回答什么问题呢?另一个问题是:牧师在做记录之前对数据的确认是什么?也就是说,应该验证什么。可能在家谱服务中,可以检查一个人只能添加与他有关的人的记录……但这是否意味着测量服务必须验证传入的出生和死亡事件是否有效?或者PersonName的输入是否有效?什么时候应该分别在人与事实的界限内?什么是有效的出生事件?无论如何,这件事应该是一个人存在的开始。至于死亡事件——可以证实的是,只有出生的人死了。不允许为此人举办其他活动。然后,任何人(或任何人的生活事实)都可以从这些记录中重建。一个人可以通过全名、出生日期和地点来识别。Metrical服务还可以验证重复的出生事件。