Событие Sourcing и Event / Совокупные версии

Я просто пытался узнать немного больше о CQRS и Event Sourcing.

Просматривая примеры и блоги, я вижу много примеров структур событий, которые похожи на это

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;}
}

Что я не понимаю, так это то, для чего предназначена эта целочисленная версия, и, возможно, из-за отсутствия понимания общей картины я не могу найти ответ.

Это просто счетчик того, какое событие мы проводим в порядке возрастания? Это на самом деле версия события, например, если вы измените схему или что-то еще?

И то же самое с Агрегатами, когда я смотрю на разные агрегаты и вижу одну в версии 1, а другую в версии 2, что именно это должно означать для меня?

1 ответ

Решение

Версия события - это на самом деле метаданные, встроенные в полезную нагрузку события, для более легкого доступа к любому потребляющему коду. Это позиция события в определенном потоке, обычно разделенная вдоль оси совокупности.

Теперь некоторые фреймворки / библиотеки должны переносить номер версии, в которой находится агрегат (т. Е. Последнюю занятую позицию, когда агрегат был прочитан), от чтения до записи (добавления новых событий), поэтому вы найдете его в тело совокупного базового класса. Так что, по сути, он существует по причинам оптимистичного параллелизма.

Версии контракта или схемы часто переводятся в имя типа или некоторый атрибут, добавленный к типу (например, пространство имен схемы XML), а не в саму полезную нагрузку (ну, обычно).

Очевидно, что все, представленное как метаданные, может быть внедрено и наоборот.

Другие вопросы по тегам