事件采购和事件/聚合版本

时间:2014-11-01 21:58:34

标签: cqrs event-sourcing

我一直在努力学习更多关于CQRS和事件采购的知识。

通过示例和博客,我看到很多像这样的事件结构

public class Event
{
    public Guid AggregateId {get; set;}
    public string Data {get; set;} //some serialized data
    public int Version {get; set;}
}

然后是聚合

public class Aggregate
{
    public Guid AggregateId {get; set;}
    public string Name {get; set;}
    public int Version {get; set;}
}

我不明白这个版本的整数是什么,也许我缺乏全局了解是为什么我似乎无法找到答案。

这只是我们按升序排列的事件的反击吗? 它实际上是一个事件的版本,就像你改变架构一样吗?

和Aggregates一样,当我查看不同的聚合时,我看到版本1中的一个,版本2中的一个,这对我来说究竟是什么意思?

1 个答案:

答案 0 :(得分:4)

事件的版本实际上是嵌入在事件有效负载中的元数据,以便于访问任何消费代码。它是特定流中事件的位置,通常沿聚合轴分割。

现在,一些框架/库需要继承聚合所在的版本号(即读取聚合时的最后一个位置),从读取它到写入它(添加新事件),这就是为什么你&#39 ; ll会在聚合基类的主体上找到它。因此,实质上它是出于乐观的并发原因。

合同或模式版本控制通常会转换为类型的名称或类型上的某些属性(例如xml架构名称空间),而不是有效负载本身(好吧,不常见)。

显然,任何表示为元数据的内容都可以嵌入,反之亦然。