根据事件来源。调用命令时,必须存储域中的所有事件
对于每个事件,系统必须增加聚合的版本。我的事件存储是这样的:
(AggregateId、AggregateVersion、Sequence、Data、EventName、CreatedDate(
(AggggateId、AggregateVersion(是关键
在某些情况下,增加聚合的版本是没有意义的。例如命令注册用户并引发RegisteredUser、WelcomeEmailEvent、GiftCardEvent
如何处理此问题?
如何处理此问题?
避免混淆您对信息的表示更改发布中的事件以供其他地方使用。
"事件来源";,如在domain-drive-design
和cqrs
空间中通常理解的,是一种数据模型。我们具体讨论的是聚合向其未来自身发送的信息,这些信息描述了其自身随时间的变化。
它是"只是";另一种存储聚合状态的方法,与我们在关系数据库或文档存储等中存储信息时所做的相同。
我们要发送到其他组件然后忘记的消息不需要在事件流中包含事件。
在某些情况下,当我们没有意识到有多个不同的过程在起作用时,可能会出现混乱。
类似于";当新用户注册时,我们应该向他们发送一封欢迎电子邮件";不一定是注册过程的一部分;它可能是由CCD_ 3事件的出现触发的独立进程。您需要为SendEmail过程保存的信息将是";其他地方"-在用户事件历史记录之外。
Event更改聚合的状态,从而更改其版本。如果状态未更改,则不应存在此聚合的事件。
在您的例子中,我会问自己——如果WelcomeEmailEvent没有改变User聚合的状态,那么它会改变谁的状态?也许是其他一些聚合——一些关心成功或提交电子邮件尝试的EmailNotification服务。在这种情况下,我会使它成为那些状态发生变化的集合的事件。它将影响那个些聚合的版本。