CQRS - должны ли CommandHandlers вызывать другие CommandHandlers - PullRequest
1 голос
/ 23 июля 2010

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

Вот простой случай, с которым я только что столкнулся. У меня есть ChangePasswordCommandHandler, команда которого выглядит следующим образом:

public class ChangePasswordCommand : Command
{
    public string Email { get; }
    public string OldPassword { get; set; }
    public string NewPassword { get; set; }
}

Итак, внутри обработчика мне нужно проверить старый пароль пользователя, так что, как я вижу, у меня есть три варианта:

  1. отправить вызов моему ValidateCredentialsCommandHandler.
  2. выделяет некоторую логику проверки в службу, которую могут использовать оба обработчика.
  3. пусть вызывающий процесс сначала выполнит эту проверку, но теперь бизнес-логика выходит за пределы уровня моего домена.

Я сталкиваюсь с несколькими техническими проблемами, связанными с отправкой другим обработчикам, в основном, потому что я использую транзакцию для веб-запроса, поэтому у меня есть две транзакции, пытающиеся бороться.

Мысли

Ответы [ 2 ]

3 голосов
/ 23 июля 2010

Обработчик команд обрабатывает команды. Если ChangePasswordCommandHandler отправляет проверку на ValidateCredentialsCommandHandler, то какая команда обрабатывает ValidateCredentialsCommandHandler?

Короче говоря - нет, я не думаю, что это имеет смысл.

2-й вариант звучит лучше всех из упомянутых вами.

0 голосов
/ 12 мая 2014

Чтобы изменить пароль, ваш ChangePasswordCommandHandler, скорее всего, совершит вызов модели домена пользователя, например:

user.changePassword( oldPass, newPass );

Проверка старого пароля должна произойти в changePasswordметод.Например:

public void changePassword( String oldPass, String newPass ) {
  this.validatePassword( oldPass );
  // continue with password change...
}

Таким образом вся логика домена инкапсулирована в модель домена.

...