我长期以来一直使用MVC,并听说过在Java Web项目中使用"服务(Service)"层,我一直在想,这是否是一个真正的架构模式,因为我找不到太多关于它的信息。
MVCS的想法是在控制器和模型之间添加一个服务层(Service layer),封装所有可能出现在控制器中的业务逻辑。这样,控制器只需要转发和控制执行。您可以在许多控制器中调用服务(例如,网站和Web服务),而无需复制代码。
我长期以来一直使用MVC,并听说过在Java Web项目中使用"服务(Service)"层,我一直在想,这是否是一个真正的架构模式,因为我找不到太多关于它的信息。
MVCS的想法是在控制器和模型之间添加一个服务层(Service layer),封装所有可能出现在控制器中的业务逻辑。这样,控制器只需要转发和控制执行。您可以在许多控制器中调用服务(例如,网站和Web服务),而无需复制代码。
服务层可以有很多种解释,但通常是指核心业务处理逻辑所在的层,位于MVC架构下面,数据访问架构上面。
例如,完整系统的分层可能如下:
服务层将负责:
您在MVC中使用的模型可能来自于服务层,也可能不来自此层。您可能希望将服务给出的结果进行操作,使其更适合于您的媒介(例如Web页面)的模型。
我之前一直在思考这个模式,但没有在任何地方看到相关参考资料,后来在谷歌上搜索时找到了你的问题 :)
即使今天也没有太多人谈论和发布关于View-Controller Service模式的内容。
想让你知道其他人也在思考这个模式,上面的图片就是我如何看待它应该是什么样子。
目前我正在使用这个模式在一个项目中。
我将它分成几个模块,每个层级在上面的图片中都有自己独立的模块。
服务层是"连接器"、“中间人”、“服务器端控制器”,它是客户端控制器为客户端所做的事情在服务器端的实现。
换句话说,客户端的“控制器”只与“服务”(即服务器端控制器)通信。
控制器 ---> 请求并从<----- 服务层接收
服务层获取或提供服务器端需要的信息。
服务本身不做任何事情,只是连接服务器层与它们所需的内容。
这里是一个代码示例:
我已经使用MVCS模式多年了,但我并不知道其他人是否也在使用,因为我在网上找不到任何可靠的信息。如果您愿意的话,我会本能地开始使用它,并且对于Laravel项目来说,它从未让我失望。我认为它是一个非常可维护的解决方案,特别是当您在敏捷环境中工作时,其中业务逻辑经常发生变化。拥有这种关注点的分离非常方便。
话虽如此,我发现在小型项目或原型中,服务层是不必要的之类的。当我制作原型时,犯了过度复杂化项目的错误,这最终只意味着需要更长的时间才能实现您的想法。如果您认真考虑在中期内维护项目,那么在我看来,MVCS是一个完美的解决方案。