Jon*_*n M 5 domain-driven-design cqrs
在试图了解CQRS(和一般的DDD)时,我遇到了两种事件发生在不同聚合上的情况,但它们的顺序具有域意义.如果是这样,那么它们可能发生得如此紧密,以至于时间戳(我所看到的示例实现所使用的)无法区分它们,这意味着事件存储不包含域的"完整"表示,因为订单存在歧义事件发生的地方.
例如,域可以触发CustomerCreatedEvent
适用于Customer
聚合的a,然后触发聚合CustomerAssignedToAgent
上的事件Agent
.如果CustomerAssignedToAgent
事件发生在事件之前CustomerCreatedEvent
,则该事件没有意义,但通常这两个事件都可能由于一个操作而被触发,这使得时间戳可能实际上是相同的.
所以我只是对事物进行严格建模?是否应该存在跨不同聚合的事件序列很重要的情况?或者您应该在事件存储中保留全局序列号,以便您可以确定事件发生的确切顺序?
一般来说,强制执行全球订单是个坏主意.聚合意味着形成ACID语义边界.
这意味着不应在一个事务中更新两个聚合,并且没有其他方法可以强制执行全局订单.
在您的情况下,有意义的是,除了创建CustomerCreatedEvent之外,客户还应向Agent聚合发送消息,告知它自己分配.通常,聚合间通信应通过消息传递完成.