gpt4 book ai didi

java - 如何用许多 if 构造重构一个大函数?

转载 作者:行者123 更新时间:2023-12-04 05:52:21 25 4
gpt4 key购买 nike

我们有应用程序 A 作为主应用程序。现在我们从中构建 App B,它使用 App A 功能的一个子集。

应用程序 A 保持原样,而应用程序 B 仅使用 A 的子集

所以我想在没有或尽可能少的重复和最大的可读性的情况下重构函数。

所以函数看起来像这样(实际上更长,这是摘录):

  class SomeClass {

Data prepareData() {

if (this.bothId==1 || this.appAid=2 /*or only relevant for appA*/) {
if(this.data==null) { /*appA*/
appAdoSmth(); /*appA*/
}
boolean merge=false; /*appA*/
if (this.data==null) { /*appA*/
merge=appAanalyze(data); /*appA*/
}
bothPrepare(merge);
} else if (bothIsRelevant()) {
if(appArelevant()) { /*appA*/
data=appAprepare(); /*appA*/
} else {
data=prepareBoth();
}
bothUpdateSomeValue();
}

}

你会怎么做?

最佳答案

其他答案解决了如何重构代码的一般问题。他们提供了很好的建议,但我认为这不是您要问的。

我认为您是在询问问题中可能的代码重构。

很难给出一个普遍适用,甚至特别适用的答案。 (示例代码不是您的真实代码,要理解它的实际“含义”有点困难)。

  • AndreasD 给出了一种方法:打破大而复杂的嵌套if成不同的方法。
  • 另一种方法是使用战略设计模式。将特定于每个应用程序的代码分成策略类。例如:
    interface Strategy {
    Data prepareData();
    }

    class GeneralStrategy implements Strategy {
    Data prepareData() {
    // do general preparation
    }
    }

    class App1Strategy extends GeneralStrategy {
    Data prepareData() {
    // do app1-specific preparation
    super.prepareData();
    // do more app1-specific preparation
    }
    }

  • 等等。

    关于java - 如何用许多 if 构造重构一个大函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9924144/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com