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

时间:2018-08-21 05:28:49

标签: spring spring-mvc spring-boot microservices

创建不同的层(即用于业务逻辑实现的服务层)而不是在Controller本身中实现该业务逻辑的用途是什么

2 个答案:

答案 0 :(得分:2)

这是因为关注点分离。 在Controller中,它主要对处理传入的http请求并响应该请求感兴趣。我们担心与处理与给定沟通渠道有关的事情有关的事情。

您可以公开rest api和soap api,或者您可能希望使用各种int格式共享数据。这样的Biz逻辑并不关心您如何将这些数据传达给最终用户。因此,您可以将其取出并保留在一个仅处理biz逻辑的通用位置,而控制器类只需调用此逻辑即可。然后,您可以通过同一块biz逻辑代码获得一个休息控制器和soap控制器应答请求。

您在控制器中执行的操作是验证请求调用服务并以您希望其对调用者公开的方式处理异常。

答案 1 :(得分:1)

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

当然,这取决于是否将可维护性放在首位