Управление версиями событий в CQRS - PullRequest
6 голосов
/ 30 марта 2010

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

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

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

1 Ответ

3 голосов
/ 14 апреля 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...