Введение в команды и запросы в Nest
Запись и чтение живут в одном сервисе, и каждое новое действие тянет правки в нескольких методах. Изменение состояния смешивается с выборкой, а повторить тот же шаг с другого адреса неудобно.
Подход
CQRS
держит изменение и чтение
на разных дорожках. Команда
описывает намерение что-то
изменить, запрос просит только
данные, а шина доставляет объект
нужному обработчику. В Nest
для этого ставят пакет
@nestjs/cqrs,
корневой модуль подключает
CqrsModule.forRoot,
а классы обработчиков записывают
в провайдеры рядом с контроллером
или сервисом.
CommandBus принимает
команды, QueryBus
принимает запросы,
EventBus рассылает
события после успешного шага.
Обработчик команды меняет массив
или другую структуру в памяти
процесса NodeJS, обработчик
запроса только возвращает
снимок, слушатель события
реагирует отдельно, не смешивая
ответ страницы с побочным кодом.
Дальше разберём класс команды и отправку через шину из сервиса, отдельный обработчик записи, класс запроса, обработчик списка, публикацию события после команды и прямой вызов шины из контроллера без лишней прослойки.