Что разделяет подход CQRS?
- Что такое CQRS простыми словами?
Команды меняют состояние, запросы возвращают данные — и модели для них разные.
- Запись защищает инварианты на нормализованной модели
- Чтение получает денормализованные представления под экраны
- Лёгкое разделение — в одном приложении и базе; полное — с отдельным хранилищем и отставанием
А ещё Отставание полного CQRS закладывают в интерфейс
Подробно
Мотив в том, что требования у записи и чтения расходятся: записи нужны инварианты и нормализованная схема, чтению — удобные денормализованные представления под конкретные экраны и совсем другой профиль нагрузки. Разделение бывает лёгким, в пределах одного приложения и одной базы, и полным, с отдельным хранилищем для чтения — во втором случае появляется отставание данных, которое нужно закладывать в интерфейс.
Что хотят услышать
- Разделение команд и запросов.
- Зачем: разные требования к записи и чтению.
- Лёгкий и полный варианты.
Частые ошибки
- Считать, что CQRS обязательно требует отдельной базы для чтения.
- Путать его с event sourcing — это независимые решения.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Бизнес-логику приложения и слой представления пользователю
- ✗Синхронные и асинхронные вызовы между сервисами системы
- ✗Данные пользователей и системные метаданные сервиса
- ✓Модель для изменения данных и модель для их чтения
Что спросят дальше
- Какую цену платит полный вариант с отдельным хранилищем?
- Как соотносятся CQRS и event sourcing?
Разбор темы
- CQRS и Event Sourcing
Разделение моделей чтения и записи, цена рассинхронизации, событие как источник истины, снапшоты и версионирование событий, и честный ответ на вопрос «когда это не нужно».
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.