Events CQR中改变状态的事件

Events CQR中改变状态的事件,events,cqrs,saga,Events,Cqrs,Saga,这应该很容易理解,但经过一些阅读,我仍然可以找到答案 所以,假设用户需要更改他的手机号码,要完成这一点,我们可能有一个命令:ChangedUserMobileNumber 拿着新号码。负责处理该命令的域将在聚合中执行更改并发布一个事件:UserMobilePhoneChanged 在另一个域中有该事件的订阅者,该域也拥有用户移动电话号码,但根据我们的软件架构师的说法,事件无法保存任何数据,因此我们最终的结果至少是相当愚蠢的: 域1接收更新移动电话号码的命令,号码被更新,一个事件被发布,而且,由于

这应该很容易理解,但经过一些阅读,我仍然可以找到答案

所以,假设用户需要更改他的手机号码,要完成这一点,我们可能有一个命令:ChangedUserMobileNumber

拿着新号码。负责处理该命令的域将在聚合中执行更改并发布一个事件:UserMobilePhoneChanged

在另一个域中有该事件的订阅者,该域也拥有用户移动电话号码,但根据我们的软件架构师的说法,事件无法保存任何数据,因此我们最终的结果至少是相当愚蠢的:

域1接收更新移动电话号码的命令,号码被更新,一个事件被发布,而且,由于事件无法保存数据,域1中的命令处理程序发出另一个命令,该命令被发送到域2。该事件的订户也生活在域2中,然后我们有一个传奇来处理事件和命令

在实现方面,我们使用的是NServiceBus,因此我们有这个saga来处理这些消息,其中有一行代码,其中存储在saga实体中的entity.IsMobilePhoneUpdated字段在处理事件时发生更改

bool isReady=(entity.IsMobilePhoneUpdated&&entity.MobilePhoneNumber!=null)

实际上,传奇是由域1中引发的命令和事件启动的,在满足此条件之前,传奇将保持活动状态

如果由我决定,我会在活动中发送手机号码,我只是想了解一些其他的意见


谢谢

我不确定UserMobilePhoneChanged事件如何有用,除非它包含新的电话号码。用户请求更改一个数字,事件就会自动弹出。其实应该很简单。为什么您的架构师说事件不应该包含任何信息?

我不确定UserMobilePhoneChanged事件在任何方面如何有用,除非它包含新的电话号码。用户请求更改一个数字,事件就会自动弹出。其实应该很简单。为什么您的架构师说事件不应该包含任何信息?

在我设计的第一个基于事件的系统中,事件也没有数据。我也执行了这项规定。当时,这听起来像是一个聪明的决定。过了一段时间,我意识到这是愚蠢的,因此我做了很多变通办法。此外,这还导致从事件订阅者处进行大量查询,即使是对于琐碎的数据也是如此。在我意识到自己做错了之后,我改变这个“规则”没有问题

事件应具有使其有意义所需的所有数据。此外,他们应该只拥有对该事件有意义的数据。(在ChangePhoneNumber消息中没有用户地址的意义)

如果您的架构师施加了这样的限制,那么开发CQRS系统将不容易。read模型是如何更新的?因为事件没有数据,所以您可以查询一些东西来获取数据(写端?),或者找到某种方式向读取模型发送命令(那么发布事件有什么意义?)。为了解决您的问题,您应该尝试与该架构师进行专业的讨论,最好包括其他技术负责人,并且在不冒犯任何人的情况下,尝试让他放松这一约束

您可以使用的一个参数是事件源。事件源是对CQR的补充,如果没有包含数据的事件,则没有意义。使用事件源时,您拥有的唯一数据是存储在事件中的数据。即使您实际上没有实现事件源,您也可以使用它的存在作为事件拥有数据的理由


找到解决人员问题的技术解决方案没有什么意义

在我设计的第一个基于事件的系统中,事件也没有数据。我也执行了这项规定。当时,这听起来像是一个聪明的决定。过了一段时间,我意识到这是愚蠢的,因此我做了很多变通办法。此外,这还导致从事件订阅者处进行大量查询,即使是对于琐碎的数据也是如此。在我意识到自己做错了之后,我改变这个“规则”没有问题

事件应具有使其有意义所需的所有数据。此外,他们应该只拥有对该事件有意义的数据。(在ChangePhoneNumber消息中没有用户地址的意义)

如果您的架构师施加了这样的限制,那么开发CQRS系统将不容易。read模型是如何更新的?因为事件没有数据,所以您可以查询一些东西来获取数据(写端?),或者找到某种方式向读取模型发送命令(那么发布事件有什么意义?)。为了解决您的问题,您应该尝试与该架构师进行专业的讨论,最好包括其他技术负责人,并且在不冒犯任何人的情况下,尝试让他放松这一约束

您可以使用的一个参数是事件源。事件源是对CQR的补充,如果没有包含数据的事件,则没有意义。使用事件源时,您拥有的唯一数据是存储在事件中的数据。即使您实际上没有实现事件源,您也可以使用它的存在作为事件拥有数据的理由


找到解决人员问题的技术解决方案没有什么意义

我真的不知道。我被告知架构师坚信事件不应该有数据,因为我在加入这家公司之前是一名软件架构师,我不知道该问架构师为什么有这种信念,因为我可能会遇到麻烦。我在几个月前加入了这家公司,所以我不想在这方面制造问题,但我越是关注他们使用NServiceBus实现SOA,我就越意识到他们掌握了大部分的wro基础知识