java - 这是重用/共享方法的好方法吗?

标签 java refactoring

我遇到了这段代码,其中一个方法调用,例如 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/

相关文章:

c++ - 绘制游戏组件的重构代码

ios - Swift 中 Bool var 和 func 命名约定的困惑

jquery - 重构 jQuery 代码块?

java - 以正确的顺序获取 JSONObject

java - 在 java 中,如何使用 isAssignableFrom 的映射避免多个 if else

java - 如何在 Java 中有效地重构 SQLite 访问?

f# - 对行求和的更好方法

java - selenium-jupiter - 如何设置 Firefox 和 Chrome 选项

java - 将第二个 Activity 的值(value)保存到第一个 Activity ,而不会丢失更新的数据

java - 将 Spring IoC 与 web.xml 中定义的 servlet 结合使用