【问题标题】:Should I call all methods from one main method, or call next method at the end of current?我应该从一个主要方法调用所有方法,还是在当前结束时调用下一个方法?
【发布时间】:2019-10-10 12:41:55
【问题描述】:

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

a) 从makeDinner()

给他们打电话

b) 调用prepareTomatoes() 并在该方法结束时调用prepareMeat()?

有什么通用的方法来解决这个问题吗?在将代码拆分为不同的方法并决定哪些仍属于该方法以及哪些不属于该方法时,我通常会遇到一些问题。

edit:这是一个不好的例子,正如我所看到的那样,它确实是非常情境化的。 我的具体情况是我必须做 3 个任务 - 根据健康绘制健康条,如果 health == 0.0f 调用 died(),最后绘制健康条。 我将它分为 3 个方法 - 我调用了 drawHealthBar() - 在这个方法内部我调用了 paintHealthBar() - 在这个方法内部,我调用了 died()(如果是 health == 0.0f 当然)。

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

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

【问题讨论】:

  • 你能提供一个完整的例子而不是描述它吗?虽然我认为我知道你的意思,但如果你清楚地提出替代方案,避免歧义会容易得多。 prepareTomatoes 打电话给prepareMeat 听起来很不对劲——这不是它所说的那样。如果我想要西红柿而不是肉怎么办?
  • 对不起,这是一个不好的例子。我编辑了我的答案,我希望现在很清楚。 @ParkerHalo

标签: java methods coding-style code-cleanup


【解决方案1】:

通常,您希望代码具有良好的可读性,因此这是一个真正基于情境的问题。在您的具体示例中,我个人的意见是在 makeDinner 方法中包含 prepareTomatoes 和 prepareMeat 方法。

但是,这是非常笼统的,因为如果您需要在煮西红柿的过程中准备肉怎么办?然后,这取决于您是否总是在准备西红柿等期间准备肉……这真的是根据情况而定。

并没有真正的规则,告诉你做这个或那个。您通常会对此有所感觉。您通常希望您的方法尽可能具体,因此您可以将 makeTomatoes 拆分为“cutTomatoes”、“cleanTomatoes”、“cookTomatoes”……

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      • 2021-08-31
      相关资源
      最近更新 更多