Паттерн CQRS

Command-Query Separation - принцип разделения команд и запросов, предложил Бертран Мейер. разделяй и властвуй - принцип который применил Юлий Цезарь при завоевании Галлии, А теперь и мы изучим.

Контекст
ПРоблемная Маша:
Как ты помнишь у нас микры и паттерн Database per service. Не просто достать данные, когда надо еще несколько микров дернуть. А теперь еще Event sourcing применили и совсем усложнилась логика запросов...
Выручающий Саша:
Так сделайте два микра, в одном get, а в другом post, put, delete
ПРоблемная Маша:
И что нам это даст?
Выручающий Саша:
Логика не будет такой громоздкой.
А самое главное сможете масштабировать реплики независимо. Если запросов много а команд мало, то можно только микр запросов масштабировать.
Проблема
В сложных приложениях реализация привычных CRUD может стать громоздкой, так как при чтении может идти еще куча дополнительных запросов к другим микрам, а при записи могут быть сложные проверки, в итоге громоздкая модель. Плюс лишние затраты при масштабировании если рабочие нагрузки чтения и записи сильно отличаются или есть разные требования к производительности для чтения и для записи.
Решение
CQRS разделяет операции чтения и записи на разные модели, используя команды для обновления данных и запросы для чтения данных.
Схемы реализации
Варианты
В event driven архитектуре можно сделать, чтобы был общий сервис для отслеживания состояния сущности. Для нашего примера SAGA можно сделать Order History Service, который будет слушать события и вести Order History базу
Онлайн-школа профессионального программирования на java для коммерческих разработчиков и соискателей.
2 главные задачи, которые мы решаем:
  1. Трудоустройство и успешное прохождение испыталки.
  2. Переход на современный стек middle+
Наше главное достояние:
Менторская поддержка 24/7 и обучение в формате живого общения
Получить консультацию по обучению