2014-11-01 37 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模式名稱空間)而不是有效負載本身(以及不常見)。

很明顯,任何表示爲元數據的東西都可以嵌入,反之亦然。