BonBonSlick
@BonBonSlick
Vanilla Web Architect

Логика в командах CQRS?

По сути логика или там где была вызвана команда или в самой команде.
Я сколняюсь к тому что логика должна быть в команде т.к. неизвестно откуда она вызвана, это может быть слушатель, контроллер и другое.

Под логикой подразумеваю, у нас есть данные для обновления аккаунта пользователя мы передаем данные к хендел через
команду которая служит DTO валидатором и в хенделе выполняем уже нужные нам действия. К примеру высылаем уведомление об изменении пароля юзеру, если пароль быз изменен.

Или же логика должна быть в том месте где вызвана команда, а в команде выполняем простые уже дествия к примеру сохранение сущности и отправку емейла. Это упростит команды, сделает их боле мелкими, пускай и увеличит их количество.

Интересует распределение ответственности, где, когда как и почему? А так же что проще тестировать?
  • Вопрос задан
  • 32 просмотра
Решения вопроса 1
maksim92
@maksim92
Нашёл решение — пометь вопрос ответом!
Вы путаете команду и событие.

Команда: создать, удалить, изменить пароль, сбросить пароль, редактировать, продать и т.д.

Событие: пользователь создан, пользователь удалён, пароль пользователя изменён, пароль пользователя сброшено, пользователь отредактировать, товар продан и т.д.

Команду «отправить уведомление» вызывать в другой команде нельзя. Команды не могут вызывать друг друга напрямую. В этом случае у вас есть событие «пароль пользователя изменён». На это событие вешается подписчик Уведомления. Этот подписчик отправляет сообщение напрямую, либо вызывает такую же команду, но команду уведомлений.

Вся бизнес логика должна быть в командах, сущностях, сервисах и других классах. Всё, что относится к слою Domain Model из DDD, то и будет бизнес логикой.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы