次の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);
}
これは本当ですか?それとももっと良い考えがありますか?それとも私が間違っていますか?