Java 设计:一个方法应该做多少?

Java 设计:一个方法应该做多少?,java,Java,我理解一种方法应该有效地服务于单一目的。但如果我的方法(也充当API)的名称类似于execute(),该怎么办 所以这些东西是这样的: void execute() { /* some steps to initialize stuff */ List<String> dataToBeExecuted = mainClass.getData(); /* initialization ends */ /* steps to actually execu

我理解一种方法应该有效地服务于单一目的。但如果我的方法(也充当API)的名称类似于execute(),该怎么办

所以这些东西是这样的:

void execute() {
    /* some steps to initialize stuff */
    List<String> dataToBeExecuted = mainClass.getData();
    /* initialization ends */

    /* steps to actually execute data */
    for( ...) {
        try {
            /* generate args to be passed to executeData() */
            otherClass.executeData(args.. , dataToBeExecuted);
        } catch {
            /* log stuff */
        }
    }
    /* execution ends */

    /* steps to do some validation */
}
void execute(){
/*初始化东西的一些步骤*/
List dataToBeExecuted=mainClass.getData();
/*初始化结束*/
/*实际执行数据的步骤*/
对于(…){
试一试{
/*生成要传递给executeData()的参数*/
otherClass.executeData(参数..,要执行的数据);
}抓住{
/*原木*/
}
}
/*行刑结束*/
/*进行验证的步骤*/
}
好的,现在这个函数本身做了三件事

*初始化东西
*执行数据
*验证内容

它可以分解为3个方法,但我认为由于逻辑足够简单,因此可以将其保存在父execute()方法中


正确的方法是什么?

这不是逻辑是否简单的问题。这是数据完整性的问题。例如:

  • 初始化操作会使数据处于某种可公开的状态吗?也就是说,初始化后对象是否会发生任何对执行有害的情况
  • 类的客户机获取一个已初始化但未执行的对象是否有意义?或已执行但未验证
  • 除了在初始化对象上执行之外,还有其他操作吗?还是疑问?或者执行是初始化后唯一自然发生的事情

对这类问题的回答将指导您决定execute是一个单一的公共方法,还是分为三个。(当然,您可以在内部将其拆分为三个私有方法。)

即使您的逻辑现在已经足够简单,但明天可能会更改,例如,验证步骤会变得非常庞大。您可能希望拆分init,在3个方法中执行和验证(如果不需要从外部进行验证,可能会具有私有可见性),并创建一个公共方法,称为更通用的方法(process?),以完成所有3个方法。