重构:删除标志
Refactor: Removing flags
我有一个 Java class 例如:
public class className{
public static void methodName(Object atr1, Object atr2, Object atr3, boolean flag){
//Code here ...
if(flag){
executeASingleInstruction();
}
//Code here ...
}
}
我知道使用标志参数是一种难闻的气味,我想知道我是否可以重构此方法以删除标志参数,或者最好保持此方法现在的样子.
不要使用静态方法,如果需要设置标志可以使用对象属性,也可以在构造函数中提供标志。
public class ClassName{
private boolean flag;
//getter setter
public ClassName(){}
public ClassName(final boolean flag){this.flag = flag;}
public void methodName(Object atr1, Object atr2, Object atr3){
//Code here ...
if(flag){
executeASingleInstruction();
}
//Code here ...
}
}
尽量让它静态化enter code here
public class className{
public static void methodName(Object atr1, Object atr2, Object atr3, boolean flag){
//Code here ...
if(flag){
executeASingleInstruction();
}
//Code here ...
}
private static void executeASingleInstruction() {
// TODO Auto-generated method stub
}
}
请注意,在您的代码中还有更多需要考虑重构的东西,但这里我将只关注布尔参数 smell。
您可以通过拆分方法并决定在调用位置使用哪个新方法来重构它。
这将使您在调用任一方法时的意图更加清晰,尤其是当它们具有漂亮的描述性名称时。
如果我没记错的话,Robert C. Martin 的书中有一节是关于它的:Clean Code: A Handbook of Agile Software Craftsmanship
public class className{
public static void methodName1(Object atr1, Object atr2, Object atr3){
encapsulation1(atr1, atr2, atr3);
executeASingleInstruction();
encapsulation2(atr1, atr2, atr3);
}
public static void methodName2(Object atr1, Object atr2, Object atr3){
encapsulation1(atr1, atr2, atr3);
// no execution of aforementioned instruction
encapsulation2(atr1, atr2, atr3);
}
}
我有一个 Java class 例如:
public class className{
public static void methodName(Object atr1, Object atr2, Object atr3, boolean flag){
//Code here ...
if(flag){
executeASingleInstruction();
}
//Code here ...
}
}
我知道使用标志参数是一种难闻的气味,我想知道我是否可以重构此方法以删除标志参数,或者最好保持此方法现在的样子.
不要使用静态方法,如果需要设置标志可以使用对象属性,也可以在构造函数中提供标志。
public class ClassName{
private boolean flag;
//getter setter
public ClassName(){}
public ClassName(final boolean flag){this.flag = flag;}
public void methodName(Object atr1, Object atr2, Object atr3){
//Code here ...
if(flag){
executeASingleInstruction();
}
//Code here ...
}
}
尽量让它静态化enter code here
public class className{
public static void methodName(Object atr1, Object atr2, Object atr3, boolean flag){
//Code here ...
if(flag){
executeASingleInstruction();
}
//Code here ...
}
private static void executeASingleInstruction() {
// TODO Auto-generated method stub
}
}
请注意,在您的代码中还有更多需要考虑重构的东西,但这里我将只关注布尔参数 smell。
您可以通过拆分方法并决定在调用位置使用哪个新方法来重构它。
这将使您在调用任一方法时的意图更加清晰,尤其是当它们具有漂亮的描述性名称时。
如果我没记错的话,Robert C. Martin 的书中有一节是关于它的:Clean Code: A Handbook of Agile Software Craftsmanship
public class className{
public static void methodName1(Object atr1, Object atr2, Object atr3){
encapsulation1(atr1, atr2, atr3);
executeASingleInstruction();
encapsulation2(atr1, atr2, atr3);
}
public static void methodName2(Object atr1, Object atr2, Object atr3){
encapsulation1(atr1, atr2, atr3);
// no execution of aforementioned instruction
encapsulation2(atr1, atr2, atr3);
}
}