SpringBoot中调用外部REST服务:应在Controller还是Service类中实现?
应该在Spring Service类中执行这些REST调用
职责分离更合理:Controller的本职工作是处理HTTP层面的事情——接收请求、解析参数、包装响应结果,不该掺和业务逻辑。调用商品价格核查、支付服务这些属于checkout流程的核心业务操作,放在Service类里才符合MVC分层的设计初衷。
复用性更强:要是以后其他业务场景也需要调用这两个外部服务,Service里的方法直接就能拿来用;但Controller里的代码和特定HTTP请求绑定死了,根本没法复用。
事务与异常处理更方便:checkout流程大概率需要事务控制(比如支付失败时得回滚相关操作),Spring的事务管理主要作用在Service层,在这里处理外部调用能轻松整合事务逻辑。另外,外部REST调用的异常捕获、重试这些逻辑放在Service层,也不会把Controller的代码搞得乱糟糟。
测试更简单:Service类的方法不用启动Web容器就能做单元测试,随便模拟外部服务的返回结果就行;而Controller测试得模拟HTTP请求,麻烦多了。
内容的提问来源于stack exchange,提问作者serah
相关产品推荐
相关产品推荐

