我正在尝试使用以下CQRS 模式创建一个ASP.NET MVC应用程序(这是我对 CQRS 的第一次尝试)。我知道命令方面没有任何结果。在这个答案中,@Johannes Rudolph说如果我们需要命令端的结果,我们可以创建一个事件并订阅,以解决问题。现在,假设我们正在创建一个登录页面:
public class AuthController : Controller {
private ICommandHandler<LoginCommand> _handler;
public AuthController(ICommandHandler<LoginCommand> handler) {
_handler = handler;
}
public ActionResult Login(LoginModel model) {
if(ModelState.IsValid) {
var cmd = new LoginCommand(model.Username, model.Password);
_handler.Handle(cmd);
// how to notify about login success or failed?
}
return View(model);
}
}
如何通知登录命令成功或失败?我知道我可以在上面的方法中创建一个事件LoginCommand
并订阅它。但是,我的订阅是一个单独的方法,不能返回(例如:)指定的视图。看:
public ActionResult Login(LoginModel model) {
if(ModelState.IsValid) {
var result = true;
var cmd = new LoginCommand(model.Username, model.Password);
cmd.CommandCompleted += e => { result = e; };
_handler.Handle(cmd);
// is this correct?
if(result)
// redirect to ReturnUrl
else
// something else
}
return View(model);
}
这是真的?或者你有什么更好的主意吗?还是我错了?