私はベスト プラクティスに従い、主要なビジネス ロジックがサービス レイヤーで実行される場所にコントローラーが傾くようにしています。
以下のアクションでは、Validate Login コードをサービス レイヤーに抽出しましたが、HttpConext.GetOwinContext.Authentication を処理してクレーム ID を作成するロジックをどこに置くべきかわかりません。
このコントローラ アクションにはコードが多すぎるようですが、ここに残しても問題ありませんか? コントローラーにとどまるべきですか、それとも独自のサービス インフラストラクチャまたは何らかの静的クラスに抽出する必要がありますか?
私はこれがどこにあるのか、それが何を保持しているのかについて少し立ち往生しています。
私はオニオンアーキテクチャhttp://jeffreypalermo.com/blog/the-onion-architecture-part-1/に従おうとしています
public ActionResult Index(LoginViewModel model, string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
if (ModelState.IsValid)
{
if (_service.ValidateLogin(model.CustomerCode, model.Username, model.Password))
{
var user = _service.GetUserByUsername(model.Username);
var identity = new ClaimsIdentity(new[] {
new Claim(ClaimTypes.NameIdentifier, model.Username),
new Claim(ClaimTypes.Name, user.Name)
}, DefaultAuthenticationTypes.ApplicationCookie, ClaimTypes.Name, ClaimTypes.Role);
HttpContext.GetOwinContext().Authentication.SignIn(new AuthenticationProperties
{
IsPersistent = true
}, identity);
return RedirectToLocal(returnUrl);
}
else
{
ModelState.AddModelError(string.Empty, "Invalid Client Code, Username or Password");
}
}
return View(model);
}