Closed. This question is opinion-based。它当前不接受答案。












想要改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。

已关闭6年。



Improve this question




我收到了以下代码段的代码评论注释-
public void doWork(String a, Integer b) {
    ..
    ..
    SomeService service = getService();
    for (Integer i : numbers) {
      doMoreWork(a, b, service);
    }
}
private void doMoreWork(String a, Integer b, SomeService service) {
    ...
    ...
    ...
    service.doingMoreWork(a, b);
}

审核建议-

为了签名清晰,应在SomeService service = getService();中调用
  • doMoreWork。这样签名就变成了doMoreWork(a, b),这更容易理解。

  • 我的问题 -

    由于doMoreWork()是在循环中发生的,因此我将服务对象传递给它。 doMoreWork()只是代码中的私有(private)逻辑单元,可以将“service”作为方法参数使用。这种方法永远不会公开。在这种情况下的指导方针是什么?此处的清晰度或可读性如何受到影响?

    (笔记 :
  • getService()调用没有太多的性能开销,因此此处的性能不是我的标准。
  • 在这里不能选择服务注入(inject)。需要以示例中显示的方式获取它。
  • doMoreWork()不仅与调用service.doingMoreWork()有关。它需要遵循一些前置步骤。

  • )

    最佳答案

    如果将doMoreWork()重构为以下内容:

    private void doMoreWork(String a, Integer b) {
        SomeService service = getService();
        service.doingMoreWork(a, b);
    }
    

    那么您将doMoreWork()依赖于getService()来实现其功能。如果您想使用其他方法来获取SomeService对象,则必须重构该代码。因此,出于这个原因,您可能希望坚持使用原始实现。

    如果您使用的是像Spring这样的框架,则可以将SomeService注入(inject)到您的类中,如下所示:
    @Autowired
    private SomeService service;
    
    // use the injected service here
    private void doMoreWork(String a, Integer b) {
        service.doingMoreWork(a, b);
    }
    

    10-07 22:42