TGViewer
METANIT.COM METANIT.COM @devnull22 · 5.82K subscribers
Post #3023 1.67K
Архитектурный паттерн Command Query Responsibility Segregation (CQRS)
(продолжение предыдудщего поста)

→ CQRS — это архитектурный шаблон, разделяющий операции чтения (запросы) и операции записи (команды).
→ Команды изменяют состояние системы.
→ Запросы лишь считывают данные и никогда их не модифицируют.
→ Такое разделение позволяет каждой из сторон масштабироваться, оптимизироваться и развиваться независимо.

Основные понятия

→ Команда — действие, изменяющее данные (*CreateOrder*, *UpdateProfile*).
→ Запрос — запрос, извлекающий данные (*GetOrderById*, *ListUsers*).
→ Модель записи — обрабатывает бизнес‑правила, валидацию и изменения состояния.
→ Модель чтения — оптимизирована для быстрого извлечения данных (часто денормализованная).

Как это работает

→ Клиент отправляет команду → Обработчик команд → Модель записи → База данных.
→ Клиент отправляет запрос → Обработчик запросов → Модель чтения → Оптимизированное хранилище для чтения.
→ Команды и запросы используют раздельные пути и могут работать с разными базами данных.

Простая аналогия: банковская система

→ Команды = Внесение или снятие денег (изменяет баланс).
→ Запросы = Проверка баланса счёта или истории операций (только чтение).
→ Вы не обновляете баланс при его проверке — обязанности чётко разделены.

Преимущества

→ Повышенная производительность для систем с высокой нагрузкой на чтение.
→ Независимое масштабирование операций чтения и записи.
→ Чёткое разделение обязанностей.
→ Упрощённая оптимизация моделей данных для конкретных сценариев использования.
→ Хорошая совместимость с системами, управляемыми событиями.

Недостатки

→ Повышенная сложность архитектуры.
→ Возможная несогласованность данных между моделями чтения и записи (согласованность в конечном счёте).
→ Больший объём инфраструктуры для управления (несколько моделей, хранилищ).
→ Избыточность для небольших или простых приложений.

Лучшие практики

→ Применяйте CQRS только тогда, когда сложность оправдана.
→ Сочетайте CQRS с Event Sourcing, если требуется аудит.
→ Делайте команды сфокусированными на задаче и явными.
→ Оптимизируйте модели чтения под нужды интерфейса, а не ради чистоты домена.
→ Грамотно обрабатывайте возможную несогласованность данных в интерфейсе.

Когда применять

→ Системы с существенным дисбалансом операций чтения и записи.
→ Сложные бизнес‑домены с множеством правил.
→ Приложения, требующие масштабируемости и высокой производительности.
→ Системы, управляемые событиями, или системы на основе микросервисов.
Telegram METANIT.COM Архитектурный паттерн Command Query Responsibility Segregation (CQRS) (продолжение в следующем посте)
  • ❤ 5
  • 👍 3
  • 👏 1
More from @devnull22
  1. Mar 19, 2026Добавил в руководство по JavaScript главу про работу с датами и временем с помощью Tempora…
  2. Mar 19, 2026Роскомнадзор перестал полностью справляться с блокировками в интернете Роскомнадзор (РКН)…
  3. Mar 18, 2026Минцифры опубликовало законопроект о государственном регулировании ИИ. Закон должен начать…
  4. Mar 18, 2026Microsoft призвала разработчиков создавать ИИ-приложения в Electron на Windows 11 Microsof…
  5. Mar 18, 2026Oracle анонсировала проект Detroit, который будет развиваться в составе OpenJDK и нацелен…
  6. Mar 17, 2026Вышла новая версия платформы Java - JDK 26. JDK 26 — краткосрочная версия с поддержкой Pre…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →