我与一名初级开发人员进行了代码审查,并对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次测试。我不知道一个人比另一个人更复杂,需要进行测试。
答案 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
}
}
这种方法可能会发生不好的事情:
在这种情况下,重构代码然后代码的第一个版本会更有意义。