Вопрос с собеседования · System design

Что разделяет подход CQRS?

JuniorCQRS и Event Sourcing
Ещё спрашивают так:
  • Что такое CQRS простыми словами?
Коротко

Команды меняют состояние, запросы возвращают данные — и модели для них разные.

  • Запись защищает инварианты на нормализованной модели
  • Чтение получает денормализованные представления под экраны
  • Лёгкое разделение — в одном приложении и базе; полное — с отдельным хранилищем и отставанием

А ещё Отставание полного CQRS закладывают в интерфейс

Подробно

Мотив в том, что требования у записи и чтения расходятся: записи нужны инварианты и нормализованная схема, чтению — удобные денормализованные представления под конкретные экраны и совсем другой профиль нагрузки. Разделение бывает лёгким, в пределах одного приложения и одной базы, и полным, с отдельным хранилищем для чтения — во втором случае появляется отставание данных, которое нужно закладывать в интерфейс.

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

  • Разделение команд и запросов.
  • Зачем: разные требования к записи и чтению.
  • Лёгкий и полный варианты.

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

  • Считать, что CQRS обязательно требует отдельной базы для чтения.
  • Путать его с event sourcing — это независимые решения.

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

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

Показать варианты и ответ
  • ✗Бизнес-логику приложения и слой представления пользователю
  • ✗Синхронные и асинхронные вызовы между сервисами системы
  • ✗Данные пользователей и системные метаданные сервиса
  • ✓Модель для изменения данных и модель для их чтения

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

  • Какую цену платит полный вариант с отдельным хранилищем?
  • Как соотносятся CQRS и event sourcing?

Разбор темы

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

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования