我們正處於開發週期的一個階段(asp.net mvc applciation),我們需要對現有命令和事件(例如添加/刪除一些屬性等)進行更改。CQRS中的事件版本控制
我一直在試圖找到一種方法來在系統中引入命令/事件版本控制。我已經閱讀了谷歌/ stackoverflow等很多帖子,但我仍然看到一個實現它的代碼的例子。版本控制時應該遵循一個推薦的模式。如果是的話,任何示例/片段?
編輯:這是我在多大程度上與此
- 得到我已經向後版本我的事件,例如,最新的總是被稱爲是相同的,而走過時的人都會有加一個後綴它像「_V1」,「_V2」等
所以,如果我有一個事件
public class OrderSubmittedEvent : IDomainEvent
{
public int OrderId { get; private set; }
public OrderSubmittedEvent(int orderId)
{
OrderId = orderId;
}
}
,如果我需要添加一些屬性重新命名我的事件AB奧雅納到
public class OrderSubmittedEvent_V1 : IDomainEvent
{
public int OrderId { get; private set; }
public OrderSubmittedEvent_V1(int orderId)
{
OrderId = orderId;
}
}
,並引進具有相同名稱的另一事件是我原來的事件,但與添加的屬性,像這樣
public class OrderSubmittedEvent : IDomainEvent
{
public int OrderId { get; private set; }
public OrderSubmittedEvent(int version = 1, int orderId = 0, string customerName =
"Joe blogs", string address = "Earth")
{
OrderId = orderId;
CustomerName = customerName;
Address = address;
CurrentVersion = version;
}
public static int LatestVersion
{
get { return 2; }
}
public int CurrentVersion { get; set; }
public string CustomerName { get; set; }
public string Address { get; set; }
}
我還是要繼續前進,改變我的代碼發佈此事件包括新屬性的值。
- 當我從事件存儲我的所有事件(比如,重播)任何給定時間點,他們將永遠是反序列化後的同一類型(在這種情況下OrderSubmittedEvent)與不部分新特性以默認值填充的舊事件。
在重播我的活動時,我讓我的活動通過一個IEventUpgrader 這首先驗證事件是否是最新版本可用。因爲類型將始終是事件類型,所以此檢查基於屬性「LatestVersion」和「CurrentVersion」
大家對這種方法有何看法?
下一個待辦事項
- 如果事件是舊版本發佈的「UpdateMYEVENT」事件
感謝
您是使用事件採購還是隻使用消息驅動的CQRS? – MikeSW 2013-05-14 08:45:09
@MikeSW - 只是消息驅動CQRS – 2013-05-14 15:24:41