Получить доступ

Как соотносятся CQRS и Event Sourcing?

MiddleCQRS и Event Sourcing
Ещё спрашивают так:
  • Обязательно ли использовать CQRS вместе с Event Sourcing?
  • Что такое Event Sourcing?
Коротко

Это независимые решения, которые часто применяют вместе. CQRS — разделение моделей чтения и записи; event sourcing — хранение изменений как неизменяемого журнала событий вместо текущего состояния.

  • CQRS можно сделать над обычными таблицами
  • Event sourcing можно делать без отдельной модели чтения
  • Вместе удобно: проекции событий естественно дают модели чтения

А ещё Похоже на журнал базы данных, только на уровне предметной области

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Event sourcing. Источник истины — последовательность событий агрегата: ЗаказСоздан, ПозицияДобавлена, ЗаказОплачен. Текущее состояние получается их последовательным применением. Плюсы: полная история и аудит «бесплатно», можно восстановить состояние на любой момент, можно строить новые представления по старым событиям. Минусы: версионирование событий, снапшоты, сложность запросов по текущему состоянию.

CQRS — разделение моделей записи и чтения.

Как связаны. В event sourcing запросы по текущему состоянию («все неоплаченные заказы за неделю») по журналу событий выполнять неудобно — поэтому строят проекции: потребители событий заполняют таблицы под запросы. Это и есть модели чтения CQRS. Поэтому они так часто вместе.

Но независимы:

  • CQRS без event sourcing — модель записи в обычных таблицах, модель чтения наполняется через outbox или CDC;
  • event sourcing без отдельной модели чтения — состояние агрегата восстанавливается по событиям при каждой команде, а запросов по многим агрегатам немного.

Сказать это первым на собеседовании — признак понимания.

Что хотят услышать

  • Определения обоих понятий.
  • Что они независимы, с примером каждого без другого.
  • Почему их часто совмещают: проекции как модели чтения.

Частые ошибки

  • Считать event sourcing обязательной частью CQRS.
  • Путать event sourcing с публикацией событий интеграции.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Это независимые решения: каждое применимо без другого, хотя вместе они хорошо стыкуются
  • ✗Event Sourcing невозможен без CQRS
  • ✗CQRS — это просто другое название Event Sourcing
  • ✗CQRS обязательно требует хранения событий как источника истины

Что спросят дальше

  • Что такое проекция и почему её можно перестроить?
  • Когда event sourcing не нужен?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем