作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有应用程序 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();
}
}
最佳答案
其他答案解决了如何重构代码的一般问题。他们提供了很好的建议,但我认为这不是您要问的。
我认为您是在询问问题中可能的代码重构。
很难给出一个普遍适用,甚至特别适用的答案。 (示例代码不是您的真实代码,要理解它的实际“含义”有点困难)。
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/
我是一名优秀的程序员,十分优秀!