Я работаю над бэкэндом и пытаюсь реализовать шаблоны CQRS.Я довольно четко разбираюсь в событиях, но иногда борюсь с командами.
Я видел, что команды запрашиваются пользователями, или, например, ChangePasswordCommand
.Однако на уровне реализации пользователь просто вызывает конечную точку, обрабатываемую некоторым контроллером.
Я могу ввести UserService
в мой контроллер, который будет обрабатывать логику домена, и так поступают базовые учебные пособия (я использую Nest.JS).Однако я чувствую, что, возможно, именно здесь я должен использовать команду - поэтому я должен выполнить команду ChangePasswordCommand
в моем контроллере, и тогда модуль домена справится с этим?
Важно то, что мне нужно возвращаемое значение из команды, что не является проблемой с точки зрения реализации, но не очень хорошо с точки зрения CQRS - мне нужно ADD и GET одновременно.
Или, возможно, последний вариант - выполнить команду в контроллере, а затем выдать событие (PasswordChangedEvent
) в обработчике команд.Затем подождите, пока событие не вернется и верните значение в контроллере.
Этот последний вариант мне кажется довольно хорошим, но у меня есть проблемы с четкой реализацией внутри жизненного цикла запроса.
Я базируюсь на https://docs.nestjs.com/recipes/cqrs