Шаблон “Порождение событий”¶
Сохраняет агрегат в виде последовательности доменных событий, которые представляют изменение состояния. Приложение воссоздает текущее состояние, воспроизводя записанные события.
События сохраняются в хранилище событий (event store), у которого есть API для добавления и получения событий сущности. Также хранилище событий выполняет роль брокера сообщений — у него есть API для подписки на события.
Если для какой-то сущности событий очень много, можно использовать снэпшоты состояния сущности. Тогда для восстановления текущего состояния нужно воспроизвести события только до последнего снэпшота.
Создание и обновление¶
Шаги создания агрегата¶
- Создание экземпляра корня агрегата конструктором по умолчанию.
- Вызов
process()для генерации событий создания. - Обновление агрегата путём применения созданых событий методом
apply(). - Сохранение событий в хранилище событий.
Шаги обновления агрегата¶
- Загрузка событий из хранилища событий.
- Создание экземпляра корня агрегата конструктором по умолчанию.
- Обновление агрегата путём применения загруженных событий методом
apply() - Вызов
process()для генерации новых событий. - Обновление агрегата путём применения новых событий методом
apply(). - Сохранение событий в хранилище событий.
Преимущества¶
- Надежная публикация доменных событий
- Сохранение истории изменений агрегата
- Отсутствие большинства проблем, связанных с объектно-реляционным разрывом
- Машина времени для разработчиков
Недостатки¶
- Другая модель программирования с высоким порогом вхождения
- Сложность приложения, основанного на обмене сообщениями
- Меняющиеся события могут создать проблемы
- Усложняется удаление данных
- Трудности при обращении к хранилищу событий
Ссылки¶
Подробнее о преимуществах
Подробнее о недостатках
https://microservices.io/patterns/data/event-sourcing.html
Последнее обновление :
24 июня 2023 г.
Дата создания : 16 июля 2022 г.
Дата создания : 16 июля 2022 г.