这应该很容易理解,但经过一些阅读,我仍然可以找到答案。
因此,假设用户需要更改他的手机号码,为了实现这一点,我们可能有一个命令:ChangedUserMobileNumber
持有新号码。负责处理命令的域将在聚合中执行更改并发布事件:UserMobilePhoneChanged
在另一个域中有该事件的订阅者,该用户的手机号码也包含在其聚合中,但根据我们的软件架构师的说法,事件不能旧任何数据,所以我们最终得到的结果至少可以说是相当愚蠢的:
域 1 接收到更新手机号码的命令,号码被更新并发布一个事件,同时,由于事件无法保存数据,域 1 中的命令处理程序发出另一个命令,该命令发送到域 2。该事件的订阅者也位于域 2 中,然后我们有一个 Saga 来处理事件和命令。
在实现方面,我们使用 NServiceBus,所以我们有这个 saga 来处理这些消息,并且在其中我们有这行代码,其中存储在 saga 实体中的 entity.IsMobilePhoneUpdated 字段在处理事件时发生了更改。
bool isReady = (entity.IsMobilePhoneUpdated && entity.MobilePhoneNumber != null);
实际上,Saga 是由 Domain 1 中引发的命令和事件启动的,并且在满足此条件之前,saga 将保持活动状态。
如果由我决定,我会在活动本身发送手机号码,我只是想就此获得一些其他意见。
谢谢