我遇到了这段代码,其中一个方法调用,例如 ClassA.search(a, b, flag) 被 3 个 Controller 使用。这是该方法的简化版本:
public List<Result> search(Object a, Object b, boolean flag) {
//do some code logic here, common to the 3 controllers
//at the middle there is:
if (flag) {
//code that affects 2 Controllers
} else {
//code affects only 1
}
//some more common code
//some more code with the flag if else
}
这是一个好主意,因为代码可以重用吗?或者是否有更好的方法仍然能够重用代码但不为方法调用者(客户端)代码自定义引入此标志(比如可能将其拆分为 3 个不同的方法但仍然能够声明一个公共(public)代码重构方法)?
最佳答案
首先,提取带有函数的注释行:
public void search(Object a, Object b, boolean flag)
{
commonToThree();
if (flag)
{
affectTwoControllers();
}
else
{
affectsOnlyOne();
}
alsoCommon();
}
现在摆脱 flag
boolean 参数,这是一种代码味道:
public void searchWithTrueFlag(Object a, Object b) {
commonToThree();
affectTwoControllers();
alsoCommon();
}
public void searchWithFalseFlag(Object a, Object b) {
commonToThree();
affectsOnlyOne();
alsoCommon();
}
关于java - 这是重用/共享方法的好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7330019/