domain-driven-design - 如何处理域模型更新和存储事件的不变性?

标签 domain-driven-design cqrs event-sourcing

我了解事件溯源中的事件绝不应该被允许改变。但是内存状态呢?如果域模型需要以某种方式更新,旧事件不应该仍然重播到旧模型吗?我的意思是不应该总是重播事件并获得与以前完全相同的状态,或者只要存储的事件保持不变,如果这种状态演变得太快,是否可以接受?理想情况下,我想我希望能够像旧模型、规则一样获得状态。但除此之外,我当然也想将旧事件重播到新模型中。理论对此有何看法?

最佳答案

预测事件结构变化

您应该始终尝试反射(reflect)这样一个事实,即事件在您的事件应用程序机制中具有不同的结构(即您在哪里读取事件并将它们应用于模型)。 毕竟,事件的早期结构在当时是有效的结构。

这意味着您需要为这种情况做好准备。设计足够灵活的事件应用机制,以便您可以支持这种情况。

迁移存储的事件

只有 作为最后的手段如果您迁移存储的事件。如果您这样做,请确保您了解后果:

  • 哪些其他系统消耗了遗留事件?
  • 如果我们更改存储的事件,我们是否对它们有问题?
  • 迁移是否适用于我们的系统(在具有完整数据集的 QA 环境中验证)?
  • 关于domain-driven-design - 如何处理域模型更新和存储事件的不变性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34202925/

    相关文章:

    C# MongoDB 查询与 BsonClassMaps

    spring - 向 Spring Data Rest 端点返回的对象添加字段?

    javascript - 如何在 CQRS Web 应用程序中向用户提供即时反馈

    domain-driven-design - CQRS/事件溯源 - 是否期望从用户/请求接收聚合 ID?

    design-patterns - 重播事件以进行调整

    c# - 领域驱动设计中的验证

    asp.net-core - 如何处理多层一对多关系的DAL?

    domain-driven-design - 聚合根数据重复和得墨忒耳定律

    apache-kafka - 如何处理对 Message Broker 生产者/消费者的 HTTP 请求?

    domain-driven-design - 是否有一种可接受的方法来处理包含另一个聚合 ID 的事件?