【问题标题】:MVC's service layer [closed]MVC的服务层[关闭]
【发布时间】:2014-04-16 14:23:56
【问题描述】:

我的 MVC 的控制器动作越来越大。我想创建一个服务层,以便我可以在那里移动代码。这个想法是使用 SOLID 原则:控制器使用服务层来获取域模型,然后将其转换为视图模型。

我的问题很简单:我的服务层应该是与我的 MVC 项目一起使用的新程序集(项目),还是应该只是我现有程序集(MVC 项目)中的一个类?

我的方法将类似于以下方法,但不幸的是,该帖子没有准确解释服务层是如何定义的: http://weblogs.asp.net/gunnarpeipman/archive/2011/06/20/asp-net-mvc-moving-code-from-controller-action-to-service-layer.aspx

【问题讨论】:

  • 这是一个见仁见智的问题,所以你可能会在programmers.stackexchange.com得到更好的答案
  • @RGraham 关于论坛是正确的,但我会说它应该在一个单独的程序集中。现在,您可能只有一个 UI,但是假设您想要移动,如果该服务层与 MVC 组装在一起,您将无法重用该服务层。将其分开还有其他优点
  • 感谢@RGraham 和 ken4z。那么,如果我选择创建一个新的程序集,它应该是一个库类吗?

标签: c# asp.net asp.net-mvc architecture asp.net-mvc-5


【解决方案1】:

我会考虑将服务层作为一个单独的东西。

服务可以是基于接口的对象,可以在应用程序的内存中实现,也可以通过 SOAP、REST、RCP-XML 或其他任何方式远程访问和分发。控制器/客户端不需要知道或关心他们是否有基于接口的客户端程序。

依赖注入、基于接口的解决方案允许您成对注入客户端和服务实现,因此如果您更改访问服务的方式,控制器就不会受到干扰。

控制器通常与视图紧密相关。风景来来去去,但服务往往保持不变。服务应该映射到可以跨应用程序共享的业务功能。

【讨论】:

  • 谢谢!我猜你的意思是我必须在一个新项目(类库)中声明我的服务层。对吗?
  • 接口必须共享,但客户端和服务器的实现应该是单独的 DLL。
  • 恐怕我没听懂。我是 MVC 新手。我的解决方案有一个最初使用“ASP.Net Web 应用程序”模板的程序集。为了创建这个新的“服务层”程序集,我正在考虑选择模板“类库”。这是正确的举动吗?
  • 抱歉,我对 .NET 了解不多。我认为这将是您要添加的单独 DLL,就像 3rd 方库一样。除了提供者是你。
【解决方案2】:

我的服务层应该是一个新的程序集(项目)

是的,应该。其他 UI 可能希望在未来使用它...

【讨论】:

  • 在这种情况下,新程序集应该是库类还是应该选择不同的选项?
  • 一个库类。展望未来,该服务层的部分内容可以通过 Web 服务等方式公开。
  • 你的意思是一个类库:) 完美
  • 您可以将数据层注入服务层 - 确保它是松散耦合的。例如。数据库的更改不应导致服务层的任何更改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 2016-05-23
  • 2023-03-28
  • 1970-01-01
  • 2016-11-29
  • 2017-06-09
相关资源
最近更新 更多