2014-11-01 78 views
2

我刚刚尝试了解更多关于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处看到一个,那么这对我来说意味着什么呢?

回答

4

事件的版本实际上是元数据嵌入在事件有效载荷中,以便更容易地访问任何消费代码。它是事件在特定流中的位置,通常沿着集合的轴线进行分割。

现在,一些框架/库需要将聚合所在的版本号(即聚合被读取后的最后一个位置)从阅读到写入(附加新事件),这就是为什么你需要“我会在一个聚合基类的主体上找到它。因此,本质上它是出于乐观并发原因。

契约或模式版本化通常转换为类型名称或某些属性(例如xml模式名称空间)而不是有效负载本身(以及不常见)。

很明显,任何表示为元数据的东西都可以嵌入,反之亦然。