Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 为什么我们需要在单独的服务层中编写业务逻辑,而不是在控制器本身中编写?_Spring_Spring Mvc_Spring Boot_Microservices - Fatal编程技术网

Spring 为什么我们需要在单独的服务层中编写业务逻辑,而不是在控制器本身中编写?

Spring 为什么我们需要在单独的服务层中编写业务逻辑,而不是在控制器本身中编写?,spring,spring-mvc,spring-boot,microservices,Spring,Spring Mvc,Spring Boot,Microservices,创建不同的层(即业务逻辑实现的服务层)而不是在控制器本身中实现该业务逻辑有什么用?这是因为关注点分离。 在控制器中,它主要对处理传入的http请求和响应该请求感兴趣。我们担心的是与处理与给定通信渠道相关的内容有关的事情 您可以公开RESTAPI以及soap api,也可以使用各种格式的int来共享数据。业务逻辑本身并不关心您如何将这些数据传达给最终用户。所以你把它取出来,放在一个公共的地方,只处理业务逻辑,而控制器类只调用它。然后,您可以让rest控制器和soap控制器通过相同的业务逻辑代码应答

创建不同的层(即业务逻辑实现的服务层)而不是在控制器本身中实现该业务逻辑有什么用?这是因为关注点分离。 在控制器中,它主要对处理传入的http请求和响应该请求感兴趣。我们担心的是与处理与给定通信渠道相关的内容有关的事情

您可以公开RESTAPI以及soap api,也可以使用各种格式的int来共享数据。业务逻辑本身并不关心您如何将这些数据传达给最终用户。所以你把它取出来,放在一个公共的地方,只处理业务逻辑,而控制器类只调用它。然后,您可以让rest控制器和soap控制器通过相同的业务逻辑代码应答请求


在controller中,您要做的是验证调用服务的请求,并以您希望向调用者公开的方式处理异常。

这取决于您的体系结构。如果您使用一些领域驱动的设计原则,那么控制器/api中几乎没有逻辑。控制器将用于协调/管理域服务(即AccountService)、存储库(即AccountRepo)和/或基础设施服务(即EmailService)之间的通信。所有逻辑都在模型和服务中。一些优点是。。。 1.单元可测试代码 2.代码更好地模拟了业务问题(控制器对业务问题毫无意义) 3.控制器不会成为一个阻塞大量业务逻辑并导致混乱的地方 4.还有更多


当然,这一切都取决于可维护性是否是一个优先事项

,因为这是一个良好的实践性的MVC设计pattern@franiis这个问题在那里很不合适,原因和这里一样。请不要推荐你不熟悉的网站。另请参见:这是一个非常好的答案。我不清楚的是为什么业务逻辑需要在一个单独的项目中。它可能不在API项目中,而只是封装在不同的类中吗?谢谢