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

How to handle domain model updates and immutability of stored events?

我明白事件溯源中的事件永远不应该被允许改变。但是内存状态呢?如果域模型需要以某种方式更新,旧事件是否仍应重播到旧模型?我的意思是,难道不应该总是重播事件并获得与以前相同的 exact 状态,或者如果只要存储的事件保持不变,这种状态也会发生变化,是否可以接受?理想情况下,我认为我希望能够获得一个状态,因为它是旧模型、规则等等。但除此之外,我当然还想将旧事件重播到新模型中。理论对此有何看法?

预计事件结构变化

您应该始终尝试反映一个事件在您的事件应用机制中具有不同结构的事实(即您读取事件并将它们应用到模型的地方)。 毕竟,事件的早期结构在当时是有效的结构。

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

正在迁移存储的事件

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

  • 还有哪些其他系统使用了遗留事件?
  • 如果我们更改存储的事件,我们对它们有问题吗?
  • 迁移是否适用于我们的系统(在具有完整数据集的 QA 环境中验证)?