关于如何组织方法的最佳实践?

Best practice on how to organize methods?

是否有关于在何处声明仅在另一个方法中使用(或调用)的方法的标准做法或约定?为了证明这一点,假设如下:

public class MyClass{
    methodA();
    methodB();
    methodC();

    public void methodA(){
        methodA1();
        methodA2();
    }  
    public void methodB(){
        methodB1();
        methodB2();
    }
    private void methodA1(){
        do something;
    }
    private void methodA2(){
        do something;
    }
}

或者,是否有不同的编码方式可以提高上述代码的可读性?我已经阅读了具有类似主题的其他问题,但它们没有解决我的问题,该问题特定于其他方法中使用的方法。您可以假设 methodA、methodB 和 methodC 对于特定任务具有逻辑和有意义的顺序。我的问题是其他方法(methodA1、methodA2、..)在此任务中没有意义,它们仅在调用它们的方法内部有意义。或者,我根本不应该为在哪里放置方法声明而烦恼吗?

如果您只使用文本编辑器来阅读和更改代码,那么考虑声明方法的顺序可能是有意义的,但通常您会使用像 Eclipse 这样的现代工具,它为您提供了方法的概述,并允许您遵循调用层次结构,因此它们位于何处并不重要。

最好集中精力让你的代码尽可能独立和抽象,方法只做一件事,类功能非常明确,不惜一切代价避免膨胀它与应该由另一个对象完成的工作。

哦,写好评论。这意味着解释为什么而不是你在做什么

Methods should be ordered in such a way so that they read like a story that doesn't cause the reader to need to jump around the code too much

罗伯特·C·马丁(又名鲍勃叔叔)

这意味着(简而言之)您的 methodA1、methodA2 应该放在 methodA 之后(使用它们)。同methodB methodB1, methodB2。我希望看到类似的东西:

public class MyClass {
    methodA();
    methodB();
    methodC();

    public void methodA() {
        methodA1();
        methodA2();
    }

    private void methodA1() {
        do something;
    }
    private void methodA2() {
        do something;
    }

    public void methodB() {
        methodB1();
        methodB2();
    }

    public void methodB1() {
        do something;
    }

    public void methodB2() {
        do something;
    }
}

还建议您将成员变量放在顶部(这样就不会根据访问修饰符做出放置决定)。

您可能想查看 Uncle Bob 的 books or videos 以获得一些关于编写干净代码的非常好的建议。

如果只有一个函数调用一个方法,而且它只调用一次,你可以只使用一个函数。

如果它多次调用它,将它放在 "parent" 函数之前,中间不要有任何换行符。如果可读性会受到影响(例如,javadocs 会被一千个无用的函数弄得一团糟)考虑将它们全部隐藏在 private 下,并带有 util_/internaluse_//zzz 前缀或 parentname_ like methodA_methodA1

如果它被多个函数调用,它更像是一个实用函数。所以就这样对待。这些效用函数中的几个可以成为效用 class.

此外,就我个人而言,我使用 C++ 风格。所以成员,然后是 A1、A2、A、B1、B2、B。