将 if-then-else 转换为条件的模式
Pattern for converting if-then-else to conditional
此重构模式的名称是什么?我想阅读更多关于它的意见,但不能说出它的名字。
在if-else-语句的两个分支中执行相同的代码,但只有一个原子表达式不同。例如
if (condition) {
prepareSomethingAdditional();
callMethod(true, "foobar");
}
else {
callMethod(false, "foobar");
}
这可以重构,表示 "callMethod" 调用意味着 总是 被执行,只是参数应根据条件而有所不同。例如
if (condition) {
prepareSomethingAdditional();
}
callMethod(condition, "foobar");
当然,这可能会导致使用条件运算符作为方法参数(如果一个不同的表达式不仅仅是一个简单的 true/false),这是另一个争论。
我找到的最接近的模式是 Martin Fowler 的 Consolidate Duplicate Conditional Fragments。
这不是完全一样的东西,因为片段略有不同,但我认为在这种情况下它仍然可以放在保护伞下。
恕我直言,您也可以将其视为 DRY。
另一方面,请注意,将布尔值传递给用于控制执行流程的函数通常不是一个好主意,但这不是黄金法则。
此重构模式的名称是什么?我想阅读更多关于它的意见,但不能说出它的名字。
在if-else-语句的两个分支中执行相同的代码,但只有一个原子表达式不同。例如
if (condition) {
prepareSomethingAdditional();
callMethod(true, "foobar");
}
else {
callMethod(false, "foobar");
}
这可以重构,表示 "callMethod" 调用意味着 总是 被执行,只是参数应根据条件而有所不同。例如
if (condition) {
prepareSomethingAdditional();
}
callMethod(condition, "foobar");
当然,这可能会导致使用条件运算符作为方法参数(如果一个不同的表达式不仅仅是一个简单的 true/false),这是另一个争论。
我找到的最接近的模式是 Martin Fowler 的 Consolidate Duplicate Conditional Fragments。
这不是完全一样的东西,因为片段略有不同,但我认为在这种情况下它仍然可以放在保护伞下。
恕我直言,您也可以将其视为 DRY。
另一方面,请注意,将布尔值传递给用于控制执行流程的函数通常不是一个好主意,但这不是黄金法则。