【问题标题】:ASP.Net MVC Architecture - Missing a layer?ASP.Net MVC 架构 - 缺少一层?
【发布时间】:2012-08-21 01:25:48
【问题描述】:

我在这个 ASP.NET MVC 应用程序上使用 Entity Framework/Repository-UnitOfWork/Service 层方法,它工作得很好,但似乎为了保持控制器薄而缺少一个层。

让我们以用户身份验证场景为例:

1) AuthenticationController 采用 IAuthenticationService,而 IUnitOfWorkIRepository<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 等上使用它们。

我的服务层只返回域对象,我需要一个地方将它们转换为视图模型,但我想将其排除在控制器之外。

对此的任何意见都会很棒!

【问题讨论】:

  • 如果您只是在寻找“最佳实践”建议,这可能更适合programmers.stackexchange.com。不过,您肯定朝着正确的方向前进。

标签: asp.net-mvc-3 repository-pattern unit-of-work service-layer


【解决方案1】:

通常,人们会使用 AutoMapper 之类的东西将您的域对象映射到 ViewModel。然后你只有一个包装你的服务层的地图调用。几乎没有理由只为对象映射引入一个全新的层。

【讨论】:

  • 我同意使用 AutoMapper,我已经同意了,但是在这个例子中设置 FormsAuthentication cookie 不是控制器的责任,或者是吗?还有一个更复杂的情况,你正在构建一个聚合模型?
  • @SamStriano - 您必须意识到表示层负责设置 cookie 和处理前端身份验证。设置 cookie 是 UI 层的一部分,而不是较低级别的一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多