将布尔值作为方法参数是不好的做法?

时间:2017-08-11 18:01:49

标签: oop

我与一名初级开发人员进行了代码审查,并对Booleans进行了讨论,他在一本名为“清洁代码”的书中读到了一些内容。罗伯特马丁。他说,这本书解释说在参数中使用布尔值是不好的做法,并使代码更难测试。具体来说,我们正在谈论类似于以下的代码:

public static void setActivateValidation(Boolean activate)
{
    System.validation = activate;
    update System.validation;
}

并且他提出的声明是一种非常糟糕的做法,而不是它应该是两种方法,如:

public static void turnOffValidation()
{
    System.validation = false;
    update System.validation;
}

public static void turnOnValidation()
{
    System.validation = true;
    update System.validation;
}

有没有理由将第一个例子视为不良做法?我个人不喜欢第二个版本,因为我觉得它只是复制代码。单元测试在两者中都非常相似,而我无论哪种方式都需要2次测试。我不知道一个人比另一个人更复杂,需要进行测试。

1 个答案:

答案 0 :(得分:3)

第一版代码没问题。只是一个简单逻辑的二传手。

恕我直言,布尔值作为参数不好的情况是当您使用此参数分支方法内的逻辑时。一个简单的例子:

public void apply(boolean applyForAllUsers) {
    if (applyForAllUser) {
        // some logics to apply some operations for all users
    } else {
        // some logics to apply some operations for one users
    }
}

这种方法可能会发生不好的事情:

  • 方法将继续增长,因为它不止一件事。
  • 很难理解,具体取决于每个逻辑的工作原理。
  • 难以测试。
  • 还有很多其他原因。

在这种情况下,重构代码然后代码的第一个版本会更有意义。