在尝试理解CQRS(和DDD)时,我遇到过这样的情况:在不同的聚合上发生了两个事件,但它们的顺序具有领域意义。如果是这样的话,它们可能会非常接近地发生,以至于时间戳(如我所见到的示例实现中使用的)无法区分它们,这意味着事件存储不包含领域的“完整”表示,因为事件发生的顺序存在歧义。
例如,领域可以触发一个适用于“客户”聚合的“CustomerCreatedEvent”,然后是一个适用于“代理商”聚合的“CustomerAssignedToAgent”事件。如果“CustomerAssignedToAgent”事件在“CustomerCreatedEvent”之前发生,则没有意义,但通常这两个事件可能是由一个操作触发的,这使得时间戳几乎相同。
那么我只是在错误地建模吗?是否应该出现跨不同聚合的事件序列很重要的情况?还是应该在事件存储中保留全局序列号,以便您可以确定事件发生的确切顺序?
例如,领域可以触发一个适用于“客户”聚合的“CustomerCreatedEvent”,然后是一个适用于“代理商”聚合的“CustomerAssignedToAgent”事件。如果“CustomerAssignedToAgent”事件在“CustomerCreatedEvent”之前发生,则没有意义,但通常这两个事件可能是由一个操作触发的,这使得时间戳几乎相同。
那么我只是在错误地建模吗?是否应该出现跨不同聚合的事件序列很重要的情况?还是应该在事件存储中保留全局序列号,以便您可以确定事件发生的确切顺序?