在资源控制器中使用多个服务的最佳方法是什么?

Vip*_*old 9 java rest spring design-patterns

我有一个控制器,可以调用三个服务:

public class ProductController() {
    @Autowired
    private AccountService accountService;

    @Autowired
    private ProcessService processService;

    @Autowired
    private releaseService releaseService;

    @RequestMapping("/process")
    public Product process(@RequestParam(value="name", defaultValue="docs")     ProductProcessed process) {

        accountService.notify();
        releaseService.sendRelease(process);


        return processService.process(process);
    }
}
Run Code Online (Sandbox Code Playgroud)

}

封装此服务调用的最佳方法是什么?

Yaz*_*zad 5

您正在寻找的可能是一些设计模式。我的方法可能是在细粒度的服务(帐户,流程和发布)上创建一个粗粒度的外观。(另请参见粗粒度与细粒度

Facade基本上将注入这3种服务,并封装您使控制器当前执行的行为。这样,您将在调用控制器中的粗粒度服务时将业务逻辑最小化,从而进一步封装了系统的内胆。

  • 外墙会打破单一责任原则吗? (2认同)
  • 良好的后续行动 - 不,它不会破坏单一责任。其实也符合你指出的原则。Facade 将负责封装和您的组件的内部工作。控制器将负责处理传入的请求并重定向到视图 - 业务逻辑方面现在由控制器“委托”给外观。 (2认同)