開発サイクル (asp.net mvc applciation) のある時点で、既存のコマンドとイベントに変更を導入する必要があります (いくつかのプロパティの追加/削除など)。
システムにコマンド/イベントのバージョン管理を導入する方法を見つけようとしています。私は google/stackoverflow などで多くの投稿を読みましたが、それを実装するコードの例をまだ見ていません。バージョン管理時に従うべき推奨パターンはありますか。はいの場合、例/スニペットはありますか?
編集:これは私がこれでどこまで到達したかです
- 最新のものは常に同じように呼び出され、廃止されたものには「_V1」、「_V2」などの接尾辞が追加されるように、イベントを逆バージョンにしました。
だからイベントがあれば
public class OrderSubmittedEvent : IDomainEvent
{
public int OrderId { get; private set; }
public OrderSubmittedEvent(int orderId)
{
OrderId = orderId;
}
}
いくつかのプロパティを追加する必要がある場合は、上記のイベントの名前を
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」イベントを発行します
ありがとう