2

避免使用大型的、单一的方法被认为是一种好的做法。我个人喜欢识别所有具有独特、明确目的的代码,并将它们重构为一种方法。这样,代码读起来更像一本书。

这种方法的一个明显问题是,我的课程最终在其预期范围之外有大量可用的方法,我认为这是非常不受欢迎的。

有一些方法可以在 Java 中创建嵌套函数,但由于该语言不直接支持该功能,因此生成的代码通常难以理解——至少对我来说是这样。

也可以使用嵌套类。我不喜欢这个解决方案的一点是它有点笨拙——是吗?——当“组合在一起”中涉及的一些方法是被覆盖的方法时。

相当模糊的问题,但无论如何我想知道人们是如何做到这一点的。

编辑:我的意思的例子:

public class ClassWithTwoMainMethods {

    private int var1;
    private int var2;

    public void doSomething(int a) {
        if (conditionToCheck(a)) {
            doSomethingSpecific();
        }
    }

    private void doSomethingSpecific() {
        ...
    }

    private boolean conditionToCheck(int a) {
        ...
    }

    public void doSomethingElse(int a, int b) {
        doSomethingElseHelper1(a+b);
        doSomethingElseHelper2();
        doSomethingElseHelper3();
    }

    private void doSomethingElseHelper1(int arg) {
        ...
    }

    private void doSomethingElseHelper2() {
        ...
    }

    private void doSomethingElseHelper3() {
        ...
    }

}

乍一看,上面的类有一个“main”方法和两个不应该在其他地方使用的“helpers”,以及另一个“main”方法和三个helpers,这并不明显。

4

1 回答 1

1

我为此使用“工作对象”。工作对象仅存在于方法内部,有助于实现目标。一个典型的例子是String这个工人非常有用,以至于方法经常返回它。

所以我所做的是我在一个工作对象中分组方法,在一个公共 API 方法中创建它(即应该在公共 API 中使用和记录一些东西)并让它做它的事情:

public void doSomethingElse(int a, int b) {
    new Worker( a, b ).run();
}

这种方法有一些好处:

  1. 您可以单独测试这些工人。
  2. 它将属于一起的代码保持在一起
  3. 它有助于避免混淆类的命名空间。不过,它确实在一定程度上污染了全局命名空间。
  4. 它允许您在不同的类中重用工人。
  5. 我可以减少对工人领域的限制。对于主类,我更喜欢不变的字段。在工人中,字段通常更像局部变量。这样,我可以减少方法参数的数量,但我需要编写更多的单元测试。
于 2013-10-17T14:17:13.507 回答