この ASP.NET MVC アプリケーションで Entity Framework/Repository-UnitOfWork/Service レイヤー メソッドを使用していますが、うまく機能しますが、コントローラーを薄く保つためにレイヤーが欠落しているようです。
たとえば、ユーザー認証のシナリオを見てみましょう。
1)AuthenticationController
は aIAuthenticationService
を取り、次にIUnitOfWork
andを取りますIRepository<User>
(私は一般的なリポジトリを使用しています)。
2) コントローラーでは、サービスがユーザーを認証するという唯一の懸念事項を作成したいと思います。
if (userService.AuthenticateUser(model.userName, model.password)) {
FormsAuthentication.SetCookie(...);
return RedirectToAction(...);
}
return View(model);
これはコントローラーのロジックが多すぎると言う人もいますよね?したがって、次のような場合は、アプリケーション マネージャーが必要になる可能性があります。
if (appManager.AuthenticateUser(model.userName, model.password)) {
// Here the app manager calls the service???
return RedirectToAction(...);
}
MVC、WinForms、コンソール、WPF、WCF などで使用できるように、ドメイン サービスを消費するアプリケーションに依存しないようにしようとしています。
私のサービス レイヤーはドメイン オブジェクトのみを返します。それらをビュー モデルに変換する場所が必要ですが、それをコントローラーから除外したいと考えています。
これに関する任意の入力は素晴らしいでしょう!!