November 26, 2022

Command Query Re чё ? Или как понять CQRS

CQRS, или Command and Query Responsibility Segregation, означает разделение ответственности команд и запросов. Это задает архитектурный стиль, когда мы разделяем модель данных на модель чтения и модели записи, а типы операций на команду и запрос:

Схема ниже показывает классический способ взаимодействия с моделью при помощи CRUD, все операции выполняются над одной моделью, чьё состояние сохраняется и читается из БД.

Теперь давайте взглянем, как изменится схема с применением паттерна CQRS.

Нашу Model мы разделили на Write Model и Read Model.

Write Model - представляет собой доменную модель, агрегат, сущность, которая содержит бизнес-логику вашего приложения. Над данной моделью могут выполняться Команды Create, Delete, Update.

Read Model - модель не содержит бизнес-логику или правила валидации, данная модель является обычной DTO, которая используя для представления (view model). Модель участвует в Запросах, операция Read из CRUD.

CQRS в своем классическом виде:

Для большой изоляции, модель записи и чтения разделяют на физическом уровне. В таком случае, модель чтения имеет собственную схему данных, оптимизированную под запросы.