【问题标题】:What is the best approach to use multiple services inside a resource controller?在资源控制器中使用多个服务的最佳方法是什么?
【发布时间】:2015-06-06 07:06:04
【问题描述】:

我有一个调用三个服务的控制器:

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);
    }
}

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

【问题讨论】:

    标签: java spring rest design-patterns


    【解决方案1】:

    您正在寻找的可能是一些设计模式。我的方法可能是在细粒度服务(帐户、流程和发布)上创建一个粗粒度的facade。 (另见Coarse-grained vs fine-grained

    Facade 基本上会在其中注入这 3 个服务,并封装您让控制器当前执行的行为。这样,您将最小化业务逻辑以调用控制器中的粗粒度服务,从而进一步封装系统的核心。

    【讨论】:

    • 门面会破坏单一职责原则吗?
    • 很好的后续行动 - 不,它不会破坏单一责任。其实是符合你指出的原则的。 Facade 将负责封装和组件的内部工作。控制器将负责处理传入的请求并重定向到视图 - 业务逻辑方面现在由控制器“委托”给外观。
    • 你绝对可以做到这一点。有时这有点过头了,所以请确保您确实需要外观。
    【解决方案2】:

    您已经将它们标记为私有,因此不能在此类之外调用它们。这是封装的。

    一种常见的做法是自动装配它们,以便可以修改服务的实现。

    【讨论】:

    • 对不起...他们被注射了!
    猜你喜欢
    • 1970-01-01
    • 2020-01-15
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    • 2018-02-16
    • 2016-11-21
    相关资源
    最近更新 更多