1

只是试图就 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. 让调用进程首先进行此检查,但现在业务逻辑泄漏到我的域层之外。

我在调度到其他处理程序时遇到了一些技术问题,主要是 b/c 我正在使用每个 Web 请求的事务,所以我有两个事务试图竞争。

想法?

4

2 回答 2

3

命令处理程序处理命令。如果ChangePasswordCommandHandler将验证发送到ValidateCredentialsCommandHandler,那么处理什么命令ValidateCredentialsCommandHandler

简而言之-不,我认为这没有道理。

您提到的第二个选项听起来最好。

于 2010-07-23T07:48:29.770 回答
0

为了更改密码,您ChangePasswordCommandHandler很可能会调用用户域模型,例如:

user.changePassword( oldPass, newPass );

然后应该在 changePassword 方法中验证旧密码。例如:

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

这样,所有领域逻辑都封装在领域模型中。

于 2014-05-12T17:40:56.600 回答