Что такое Event Sourcing?
Event Sourcing сохраняет изменения как упорядоченную последовательность событий. Приложение восстанавливает состояние, применяя эти события, вместо использования отдельной записи текущего состояния как основных данных.
События, а не команды
Команда запрашивает операцию, а событие фиксирует произошедшее. Команда ShipOrder может быть отклонена; событие OrderShipped описывает принятый переход состояния.
Название и содержимое события должны выражать смысл предметной области. Запись об обновлении строки не становится полезным событием домена автоматически.
Реляционная база тоже может хранить события и журнал аудита. Event Sourcing определяет способ сохранения и восстановления состояния приложения, а не запрещает реляционное хранение.
Восстановление состояния агрегата
Применяйте события агрегата в порядке потока, чтобы восстановить его состояние.
Снимок состояния может ускорить восстановление, если он соответствует известной версии потока. Последующие события всё равно нужно применить, а снимок остаётся производными данными.
Когда модель полезна
Event Sourcing подходит предметным областям, где важны переходы состояния, а сохранённая последовательность событий нужна для восстановления, разбора операций или дополнительных моделей чтения.
Оценивайте пользу событий домена вместе с затратами на изменение схем, воспроизведение и эксплуатацию потребителей.
Когда проще хранить текущее состояние
Если приложению достаточно текущих записей и простых запросов, обычная модель хранения может полностью решать задачу.
Журнал аудита и контроль конкуренции возможны без Event Sourcing. Выбирайте подход ради его модели хранения, а не потому, что эти возможности якобы доступны только в нём.
DDD, CQRS и Event Sourcing
DDD определяет подход к моделированию предметной области, включая агрегаты и ограниченные контексты. Event Sourcing — способ хранения, который можно использовать с этой моделью; DDD его не требует.
CQRS разделяет модели для команд и запросов. Его часто применяют вместе с Event Sourcing, но это разные подходы, и ни один из них не требует микросервисов.
Практическое упражнение
Выберите один агрегат. Опишите его команды, инварианты и события, затем проверьте, достаточно ли применения событий для восстановления состояния, необходимого для принятия решений.
Путь обучения Event Sourcing · Далее · Документация Chronacta
