Вопрос

Управление версиями
Если ваши события изменятся, вы создадите новую версию этого события и сохраните старые.Чтобы форма кода вашего домена не была раздутой из-за обработки всех версий событий, вы, по сути, вводите компонент, который преобразует ваши события из предыдущих версий в более новые, а затем применяет их в домене.Помните, что события — это события, которые действительно произошли в вашем домене, поэтому в большинстве случаев информация в устаревших событиях имеет ценность.

Я до сих пор не нашел ни одного примера этого.

Любая помощь?

Это было полезно?

Решение

Существует два основных способа обработки преобразований событий.Оба происходят во время десериализации событий:

  1. Вы можете добавлять новые классы с номерами версий (SomethingHappened, SomethingHappened2, SomethingHappened3).Десериализатор создаст экземпляр и заполнит класс, а затем передаст его преобразователю, чтобы получить то же событие в более высокой версии, здесь SomethingHappened3.Одна из проблем заключается в том, что вам также придется обновить обработчики событий, чтобы использовать последнюю версию события.Чтобы смягчить это, вы можете использовать соглашение, согласно которому SomethingHappened всегда является последней версией.При переходе к версии 2 переименуйте SomethingHappened в SomethingHappened1 и создайте SomethingHappened, который будет файлом v2.Для этого вам необходимо иметь контроль над классами, созданными из сериализованного события, поскольку имя сериализованного класса не будет содержать номер версии, вам следует сохранить его отдельно.

  2. Вместо сохранения каждой версии классов в вашем коде преобразователь получит документ (дерево, например документ Xml или объект JSon) и изменит его, чтобы предоставить информацию, необходимую для создания последней версии.

Все это зависит от вашего контроля над конвейером десериализации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top