#domain-driven-design #cqrs
#проектирование, управляемое доменом #cqrs
Вопрос:
Когда команда выдает более одного события, как обеспечить правильную регидратацию. как правильно пометить многие события как атомарные изменения
Ответ №1:
Регидратация завершена, когда применяются все доступные события. Однако, когда ваша команда генерирует несколько событий, вам просто нужно убедиться, что эти события сохраняются вместе в атомарной операции.
Пример:
Текущий поток событий:
1. MyEvent1
Затем выполните команду, которая генерирует несколько событий:
MyCommand emits ->
MyEvent1
MyEvent2
Эти события будут добавлены к потоку событий как атомарная операция.
Новый поток событий:
1. MyEvent1
2. MyEvent1
3. MyEvent2
Теперь, при регидратации агрегата, вы просто читаете весь поток событий до конца, и все готово.
Ответ №2:
Когда команда выдает более одного события, как обеспечить правильную регидратацию. как правильно пометить многие события как атомарные изменения
Обычно
- Логика вашего домена возвращает последовательность событий.
- Вы атомарно записываете всю последовательность в историю событий
- При восстановлении используется журнал событий
Обратите внимание, что второй шаг подразумевает, что ваше надежное хранилище событий будет поддерживать атомарную запись последовательности событий.
Примечание: обычно мы не полагаемся на механизм трансляции при восстановлении состояния нашей модели домена, а вместо этого используем историю.
В мире CQRS это будет включать создание модели чтения путем загрузки истории, а затем воспроизведение событий в фиксированном порядке, в котором они были записаны.
Ответ №3:
Это зависит от вашего базового хранилища. Распространенным способом реализации атомарной записи для постоянного хранилища, которое не поддерживает транзакции, является создание пакета событий и запись его как одной операции.
При регидратации событий вы можете сгладить пакеты до плоской последовательности / потока событий, чтобы создать свое текущее состояние. Во время регидратации вы действительно заботитесь обо всех событиях, поскольку вы всегда будете применять следующую команду к текущему состоянию с полной гидратацией. Таким образом, нет смысла сохранять пакеты на этом этапе.
Существует ряд решений, которые поддерживают запись / регидратацию состояния, подобного этому, если вам не хочется создавать свои собственные.
- Хранилище событий (https://eventstore.com )
- Сервер Axon (https://axoniq.io )
- Сериализованный (https://serialized.io ) для полного раскрытия информации — это наш продукт
Удачи