Model view controller MVCS-模型视图控制器服务

Model view controller MVCS-模型视图控制器服务,model-view-controller,architecture,architectural-patterns,Model View Controller,Architecture,Architectural Patterns,我已经使用MVC很长时间了,听说了“服务”层(例如在Java web项目中),我一直想知道这是否是一种真正的体系结构模式,因为我找不到很多关于它的信息 MVCS的想法是在控制器和模型之间有一个服务层,以封装控制器中可能存在的所有业务逻辑。这样,控制器只是在那里转发和控制执行。您可以在许多控制器中调用服务(例如,一个网站和一个Web服务),而无需重复代码。服务层可以以多种方式进行解释,但它通常是您拥有核心业务处理逻辑的地方,位于MVC架构之下,但位于数据访问架构之上 例如,完整系统的图层可能如下所

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


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

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

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

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

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

    您在MVC中使用的模型可能来自或不来自您的服务。您可能希望将您的服务提供给您的结果处理成一个更适合您的媒体(例如:网页)的模型。

    我自己也一直在考虑这种模式,没有在其他任何地方看到任何引用,搜索谷歌,在这里找到了您的问题:)

    即使在今天,也没有太多的机构谈论或张贴关于这个问题

    查看控制器服务模式

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

    目前我正在一个项目中使用它

    我把它放在模块中,上面图像中的每一层都有它自己的独立模块

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

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


    Controller->请求并接收来自的请求我已经使用MVCS模式多年了,我不知道还有其他人这样做,因为我在网上找不到任何可靠的信息。我开始本能地使用它,如果你喜欢的话,它永远不会让我对拉威尔的项目失望。我想说,对于中型项目来说,它是一个非常可维护的解决方案,尤其是在业务逻辑不断变化的敏捷环境中工作时。将关注点分开是非常方便的


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

    “我一直想知道这是否是一个真正的架构模式”。。。嗯,与其他设计模式相比,它的真实性并不高:)这都是关于选择最有意义的抽象——在这种情况下,当您处理各种上游数据源(数据库模型、其他web服务等)时,MVC似乎比MVC更有用,尤其是当您开始考虑将您的工作公开为服务时。当我有一个后来作为RESTAPI公开的web应用程序时,这种模式帮助我重用了很多代码。我通常使用服务进行外部访问。虽然MVC将包含我所有特定于应用程序的逻辑,但我将使用DBService或FacebookOAuthService之类的东西来处理对其他系统的所有外部调用。或者封装第三方lib而不是紧密集成,这使得切换lib更容易。对我来说,考虑这样的服务很有意义。除此之外,服务层的模型更像是一个数据传输对象,这可能会也可能不会直接转化为直接满足视图要求的内容这听起来像是MVC,但添加了一个外观以保持控制器干净。我对这种架构风格的唯一关注是假设数据模型将具有与“视图”要求相同的“形状”。如果它们是1比1或接近1,您可以为视图专门设置几个属性,我想这没关系,但是很多时候数据模型是从存储角度设计的,而视图模型是从视图角度设计的。有“数据模型”和“视图模型”,上面显示的图形做得很快,但做得很差:)