Java 我应该从一个主方法调用所有方法,还是在当前方法末尾调用下一个方法?

Java 我应该从一个主方法调用所有方法,还是在当前方法末尾调用下一个方法?,java,methods,coding-style,code-cleanup,Java,Methods,Coding Style,Code Cleanup,如果我调用方法makeDinner(),并且这个方法有子方法prepareTomatos()和prepareMeat(),我应该 a) 从makeDinner()或 b) 调用prepareTomatoes(),然后在该方法的末尾调用prepareMeat() 有没有什么通用的方法?一般来说,我在将代码拆分为不同的方法,并确定哪些仍然属于该方法,哪些不属于该方法方面存在一些问题 编辑:这是一个很糟糕的例子,正如我所看到的,这确实是一个非常情境化的例子。 我的具体情况是,我必须做3项任务——根据健

如果我调用方法
makeDinner()
,并且这个方法有子方法
prepareTomatos()
prepareMeat()
,我应该

a) 从
makeDinner()

b) 调用
prepareTomatoes()
,然后在该方法的末尾调用
prepareMeat()

有没有什么通用的方法?一般来说,我在将代码拆分为不同的方法,并确定哪些仍然属于该方法,哪些不属于该方法方面存在一些问题

编辑:这是一个很糟糕的例子,正如我所看到的,这确实是一个非常情境化的例子。 我的具体情况是,我必须做3项任务——根据健康状况绘制健康栏,如果健康状况=0.0f,则调用
died()
,最后绘制健康栏。 我将它扩展为三种方法-我调用了
drawHealthBar()
-在这个方法中我调用了
paintHealthBar()
-在这个方法中,我调用了
Dead()
(当然,如果
health==0.0f

现在,如果调用
drawHealthBar()
,则可以预期该方法还会检查运行状况并以特定颜色绘制运行状况栏。但我担心,如果我要从
paintHealthBar()
调用
died()
,它会让其他人甚至6个月后的我看代码时感到困惑


这可能比这复杂得多,但即使在“简单”的情况下,我也不知道是否应该调用
paintHealthBar()
,然后调用
drawHealthBar()
,然后调用
checkDeath()
,所有这些都来自“main”方法,或者是否可以按我的方式(向下)调用它,或者调用
draw()
在这个方法中
paint()
是可以的,但是我应该从main方法调用
checkDeath()

通常,您希望代码具有良好的可读性,所以这是一个真正基于情况的问题。在您的具体示例中,我个人的意见是将PrepareTomatos和prepareMeat方法放在MakeDinnet方法中

然而,这是非常普遍的,因为如果你需要准备肉,在西红柿烹饪的时候怎么办?这取决于你是否总是在准备西红柿的时候准备肉等等。。。这确实是一种情境

没有一个真正的规则,告诉你做这个或那个。你通常对它有感觉。你通常希望你的方法尽可能具体化,这样你就可以把你的MakeTomatos分成“Cuttomateos”、“CleanTomatos”、“CookTomatos”


但如果在拆分方面走得太远,您将再次失去可读性

通常,您希望代码具有良好的可读性,因此这是一个基于实际情况的问题。在您的具体示例中,我个人的意见是将PrepareTomatos和prepareMeat方法放在MakeDinnet方法中

然而,这是非常普遍的,因为如果你需要准备肉,在西红柿烹饪的时候怎么办?这取决于你是否总是在准备西红柿的时候准备肉等等。。。这确实是一种情境

没有一个真正的规则,告诉你做这个或那个。你通常对它有感觉。你通常希望你的方法尽可能具体化,这样你就可以把你的MakeTomatos分成“Cuttomateos”、“CleanTomatos”、“CookTomatos”

但如果在拆分方面走得太远,您将再次失去可读性

声明您不应该与陌生人交谈,这意味着应该避免像
car.getEngine().turon()
这样的链式呼叫,而
carg.turon()
更可取。现在,假设您有一个业务逻辑,允许在汽车没有燃油时打开发动机,并向驾驶员发出警报:

if (car.hasFuel()){
  car.getEngine().turnOn();
}else{
  car.alertDriver();
}
最好将此逻辑封装到
cart.turon()
方法中,而不是在车外。您可以更好地创建单元测试,避免在不检查业务规则的情况下启动汽车的错误。提高代码的可读性

声明您不应该与陌生人交谈,这意味着应该避免像
car.getEngine().turon()
这样的链式呼叫,而
carg.turon()
更可取。现在,假设您有一个业务逻辑,允许在汽车没有燃油时打开发动机,并向驾驶员发出警报:

if (car.hasFuel()){
  car.getEngine().turnOn();
}else{
  car.alertDriver();
}

最好将此逻辑封装到
cart.turon()
方法中,而不是在车外。您可以更好地创建单元测试,避免在不检查业务规则的情况下启动汽车的错误。提高代码的可读性

你能提供一个完整的例子而不是描述它吗?虽然我想我知道你的意思,但如果你清楚地提出备选方案,就更容易避免模棱两可。但是,
prepareTomatos
调用
prepareMeat
听起来非常错误-它并不是说要这么做。如果我想要西红柿而不是肉怎么办?对不起,这是个坏例子。我编辑了我的答案,希望现在答案清楚了@你能提供一个完整的例子而不是描述它吗?虽然我想我知道你的意思,但如果你清楚地提出备选方案,就更容易避免模棱两可。但是,
prepareTomatos
调用
prepareMeat
听起来非常错误-它并不是说要这么做。如果我想要西红柿而不是肉怎么办?对不起,这是个坏例子。我编辑了我的答案,希望现在答案清楚了@帕克哈洛