【发布时间】:2023-04-08 08:57:01
【问题描述】:
最近我参加了一个 CQRS 研讨会,这让我想知道在使用事件溯源时如何存储事件。
我认为在每一个事件之后,整个应用程序都应该处于有效状态(否则重放功能是无用的)。这意味着事件应该完全按照它们发生的顺序存储。我也相信所有聚合的事件顺序很重要。例如,用户可以制作产品和订单(产品和订单都是单独的聚合,订单通过 ID 引用产品)。这意味着“创建产品事件”应存储在“将产品添加到事件”之前。否则重播可能会导致引用产品的订单在产品存在之前就存在的无效状态。
这种情况如何处理?您是否应该始终使用同步方法将事件发送到数据库,例如通过锁定数据库?该解决方案是否可扩展?还是应该将每个聚合的事件存储在不同的表中?但是你如何确保订购呢?另一种选择是存储每个事件的时间,并按此排序。 PC 上计时器的精度是否足够高,可以做到这一点?
【问题讨论】:
标签: c# domain-driven-design cqrs event-sourcing