MVCS - 模型视图控制器服务

时间:2011-04-18 11:51:11

标签: model-view-controller architecture architectural-patterns

我一直在使用MVC并听说过“服务”层(例如在Java web项目中),我一直想知道这是否是真实建筑模式鉴于我找不到很多有关它的信息。

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

3 个答案:

答案 0 :(得分:77)

服务层可以通过很多方式进行解释,但它通常位于您拥有核心业务处理逻辑的位置,并且位于您的MVC架构之下,但高于您的数据访问架构。

例如,整个系统的图层可能如下所示:

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

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

    您在MVC中使用的模型可能来自也可能不来自您的服务。您可能希望获取服务为您提供的结果,并将其操作为更适合您的媒体的模型(例如:网页)。

答案 1 :(得分:12)

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

即使在今天,也没有任何机构谈论或发布有关

的内容

视图 - 控制器服务模式。

enter image description here

想让你知道其他人的想法是一样的,上面的图片就是我如何看待它的样子。

目前我正在我正在进行的项目中使用它。

我在上面图片中的每个图层的模块中都有它,并且在它自己的独立模块中。

enter image description here

服务层是"连接器" "中间人" "服务器端控制器"在那个"客户"控制器为客户端,"服务"为服务器做的。

换句话说,客户端"控制器"只有"会谈"使用"服务"又称服务器端控制器。

控制器--->来自< -----服务层

的请求和接收

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

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

以下是代码示例:

enter image description here

答案 2 :(得分:1)

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

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