MVCS-模型视图控制器服务


71

我已经使用MVC很长时间了,并且听说过“服务”层(例如在Java Web项目中),并且我一直在想,如果我找不到很多有关MVC的信息,那这是否是真正的架构模式它。

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


2
“我一直在想那是否是一种真正的建筑模式”……好吧,与其他设计模式几乎没有什么不同:)关键在于选择最有意义的抽象—在这种情况下,MVCS似乎当您处理各种上游数据源(数据库模型,其他Web服务等)时,它比MVC更有用,尤其是当您开始考虑将您的工作作为服务公开时。当我拥有后来作为REST API公开的Web应用程序时,这种模式帮助我重用了很多代码。
2012年

Answers:


89

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

例如,您的完整系统层可能看起来像这样:

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

然后,服务层将负责:

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

您在MVC中使用的模型可能来自或可能不来自您的服务。您可能需要获取服务所提供的结果,并将其操纵为更适合您的媒介的模型(例如:网页)。


1
我通常使用服务进行外部访问。虽然MVC将包含我所有应用程序特定的逻辑,但是我将对其他系统的所有外部调用使用诸如DBService或FacebookOAuthService之类的东西。或者包装第三方库而不是紧密集成,可以更轻松地切换库。对我来说,考虑这样的服务非常有意义。
Lex 2014年


这听起来像只是MVC,但增加了外观以保持控制器整洁。
大卫,

14

我本人一直在思考这种模式,但在其他任何地方都没有看到对此的任何参考,因此搜索了Google并在这里找到您的问题:)

即使在今天,也没有太多人讨论或发布有关

视图控制器服务模式。

在此处输入图片说明

想让您知道其他人也有同样的想法,上面的图像是我如何看待它。

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

我在模块中拥有它,上图中的每个层都有它自己的自包含模块。

在此处输入图片说明

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

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

控制器--->从<-----服务层进行请求和接收

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

该服务本身不执行任何操作,只是将服务器层与所需层连接起来。

这是一个代码示例:

在此处输入图片说明


我对这种架构风格的唯一担心是假设DataModels具有与“ View”需求相同的“形状”。如果它们是1比1或接近1,则可以在其中添加几个专门用于视图的属性,我想这是可以的,但是很多时候,DataModel是从存储角度设计的,而ViewModel是从存储角度设计的。观点观点。
hanzolo

有“ DataModels”和“ ViewModels”,上面显示的图形很快完成,但做得不好:)
Kbdavis07
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.