80

我已经使用 MVC 很长时间了,听说过“服务”层(例如在 Java Web 项目中),我一直想知道这是否是一种真正的架构模式,因为我找不到很多关于它。

MVCS 的想法是在控制器和模型之间有一个服务层,以封装所有可能在控制器中的业务逻辑。这样,控制器就在那里转发和控制执行。并且您可以在许多控制器(例如,网站和 Web 服务)中调用服务,而无需重复代码。

4

3 回答 3

97

服务层可以有多种解释方式,但它通常是您拥有核心业务处理逻辑的地方,位于 MVC 架构之下,但位于数据访问架构之上。

例如,您的完整系统层可能如下所示:

  1. 视图层:您选择的 MVC 框架和代码
  2. 服务层:您的控制器将调用该层的对象来获取或更新模型或其他请求。
  3. 数据访问对象:这些是您的服务层将调用以获取/更新所需数据的抽象。该层通常会调用数据库或其他一些系统(例如:LDAP 服务器、Web 服务或 NoSql 类型的数据库)

然后服务层将负责:

  • 从各种数据源(或数据访问对象)检索和创建您的“模型”。
  • 跨各种存储库/资源更新值。
  • 执行特定于应用程序的逻辑和操作等。

您在 MVC 中使用的模型可能来自也可能不来自您的服务。您可能希望获取您的服务提供给您的结果,并将它们处理成更特定于您的媒体的模型(例如:网页)。

于 2011-06-02T14:37:17.690 回答
18

我自己一直在考虑这种模式,而在其他任何地方都没有看到对此的任何参考,并在 Google 上搜索并在这里找到了您的问题 :)

即使在今天,也没有多少人谈论或发布关于

视图-控制器服务模式。

在此处输入图像描述

想让你知道其他人也有同样的想法,上面的图片是我如何看待它应该是这样的。

目前我正在我正在从事的项目中使用它。

我将它放在模块中,上图中的每一层都包含在它自己的自包含模块中。

在此处输入图像描述

服务层是“连接器”“中间人”“服务器端控制器”,因为“客户端”端控制器为客户端做的,“服务”为服务器做的。

换句话说,客户端“控制器”仅与“服务”即服务器端控制器“对话”。

控制器 ---> 来自 <----- 服务层的请求和接收

服务层获取或提供信息给需要它的服务器端的层。

服务本身不做任何事情,只是将服务器层与他们需要的东西连接起来。

这是一个代码示例:

在此处输入图像描述

于 2016-11-25T17:20:06.243 回答
2

多年来我一直在使用 MVCS 模式,但我不知道其他人做过,因为我在网上找不到任何可靠的信息。如果你愿意,我会本能地开始使用它,它从来没有让我对 Laravel 项目失望过。我会说它对于中型项目来说是一个非常可维护的解决方案,尤其是在业务逻辑不断变化的敏捷环境中工作时。关注点分离非常方便。

说到这里,我发现服务层对于小型项目或原型来说是不必要的,什么都不是。在制作原型时,我犯了一个错误,那就是让项目过于复杂,这最终意味着你需要更长的时间才能把你的想法拿出来。如果您认真考虑在中期维护项目,那么 MVCS 是 IMO 的完美解决方案。

于 2021-05-12T20:33:30.897 回答