Я использую метод слоя Entity Framework/Repository-UnitOfWork/Service в этом приложении ASP.NET MVC, и он отлично работает, но кажется, что слой может отсутствовать, чтобы контроллеры были тонкими.
Возьмем, к примеру, сценарий аутентификации пользователя:
1) AuthenticationController
принимает IAuthenticationService
, который, в свою очередь, принимает IUnitOfWork
и 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, Console, WPF, WCF и т. д.
Мои сервисные слои возвращают только объекты домена, мне нужно место для их преобразования в модели представления, но я хочу, чтобы это не касалось контроллеров.
Любой вклад в это было бы здорово!!