我有一个控制器可以调用三个服务:
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);
}
}
封装此服务调用的最佳方法是什么?
答案 0 :(得分:3)
您正在寻找的可能是一些设计模式。我的方法可能是在细粒度服务(Account,Process和Release)上创建粗粒度facade。 (另见Coarse-grained vs fine-grained)
Facade基本上会在其中注入这3个服务,并封装您当前正在执行控制器的行为。这样,您将最小化业务逻辑,以便在控制器中调用粗粒度服务,从而进一步封装系统的内核。
答案 1 :(得分:1)
您已将它们标记为私有,因此无法在此类之外调用它们。这是封装的。
通常的做法是自动装配它们,以便修改服务的实施。