如何在更改域事件结构后检索历史事件

Arn*_*kas 5 c# cqrs event-sourcing

给定带有字段的事件存储:

  • AggregateId:整数
  • 有效载荷:blob
  • 版本:整数

其中包含的事件基于:

public class OrderLineAdded
{
    int Id;
    short Quantity;
}
Run Code Online (Sandbox Code Playgroud)

...然后添加了更新结构的其他事件:

public class OrderLineAdded
{
    int ProductId; // field name has changed
    int Quantity; // field datatype has changed
}
Run Code Online (Sandbox Code Playgroud)

检索此历史数据(用于分析等)时,如何将二进制有效负载重建为有意义的数据?

注意:上面的代码不是良好的事件/事件存储实现的示例.我只是想知道应如何处理这种情况.

Ben*_*ith 3

Rinat Abdullin 在他的 CQRS bliki 中概述了一些领域事件版本控制策略,您可能会发现阅读这些策略很有用。

https://abdullin.com/post/event-source-versioning/

他提出了两种可能的方法:

  1. 使用可以自动处理事件中属性重命名的序列化程序,例如 Google 的 ProtoBuf Serializer。
  2. 实现以下接口来手动升级内存中的事件。
public interface IUpgradeDomainEvents
{
    IEnumerable<IDomainEvent> Upgrade(IDomainEvent e, string id);
}
Run Code Online (Sandbox Code Playgroud)