试着就CommandHandler是否可以/应该与其他CommandHandler进行通信获得一些意见。
这是我遇到的一个简单案例。我有一个ChangePasswordCommandHandler,其命令如下所示:
public class ChangePasswordCommand : Command
{
public string Email { get; }
public string OldPassword { get; set; }
public string NewPassword { get; set; }
}
所以,在处理程序中我需要验证用户旧密码,所以我看到它有三个选项:
我遇到了一些技术问题,主要是调度到其他处理程序b / c我正在使用每个Web请求的事务,所以我有两个交易尝试竞争。
思想?
答案 0 :(得分:3)
命令处理程序处理命令。如果ChangePasswordCommandHandler
将验证调度到ValidateCredentialsCommandHandler
,那么ValidateCredentialsCommandHandler
会处理什么命令?
简而言之 - 不,我认为这没有道理。
第二个选项听起来比你提到的最好。
答案 1 :(得分:0)
为了更改密码,您的ChangePasswordCommandHandler
很可能会调用用户域模型,例如:
user.changePassword( oldPass, newPass );
然后应在changePassword方法中验证旧密码。例如:
public void changePassword( String oldPass, String newPass ) {
this.validatePassword( oldPass );
// continue with password change...
}
这样,所有域逻辑都封装在域模型中。