在资源控制器中使用多个服务的最佳方法是什么?
What is the best approach to use multiple services inside a resource controller?
我有一个调用三个服务的控制器:
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);
}
}
封装此服务调用的最佳方法是什么?
您已经将它们标记为私有,因此无法在此 class 之外调用它们。这是封装的。
常见的做法是自动装配它们,以便可以修改服务的实现。
您正在寻找的可能是一些设计模式。我的方法可能是创建一个粗粒度的 facade over the fine-grained services (Account, Process and Release). (see also Coarse-grained vs fine-grained)
Facade 基本上会将这 3 个服务注入其中,并封装您当前让控制器执行的行为。通过这种方式,您可以最大限度地减少在控制器中调用粗粒度服务的业务逻辑,从而进一步封装系统的核心。
我有一个调用三个服务的控制器:
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);
}
}
封装此服务调用的最佳方法是什么?
您已经将它们标记为私有,因此无法在此 class 之外调用它们。这是封装的。
常见的做法是自动装配它们,以便可以修改服务的实现。
您正在寻找的可能是一些设计模式。我的方法可能是创建一个粗粒度的 facade over the fine-grained services (Account, Process and Release). (see also Coarse-grained vs fine-grained)
Facade 基本上会将这 3 个服务注入其中,并封装您当前让控制器执行的行为。通过这种方式,您可以最大限度地减少在控制器中调用粗粒度服务的业务逻辑,从而进一步封装系统的核心。