Android有什么最好的方法来命名一个也执行逻辑的布尔函数?

时间:2013-12-18 22:25:43

标签: java android coding-style refactoring

这与Android上的API设计有关:

我想要有良好的编码风格,是的,我知道这是非常小的,但我要说我有类似的东西:

public boolean validateSomeInputAndDoLogicIfNot(Context context, MyObject myObject) {
    if (someObject.isCaseOne()) {
        Toast.makeToast...
        return true;
    } else if (someObject.isCaseTwo()) {
        doSomethingCrazyHere();
        return true;
    }
    doSomethingMinorHere();
    return false;
}

首先,我看到很多代码都将其功能命名为isValid(input)。但是让我们说如果它无效,我希望该功能可以做不同的事情。现在,另一件事是:我将多次使用此功能。

所以,在我看来,命名像isValid()这样的东西意味着它没有做任何逻辑,它只是做了一些检查,并没有做任何花哨的事情。

但是命名像validateObject()之类的东西让我觉得它应该是一个可以做不同事情的void函数,但当然不会返回一个布尔值。

所以我的问题是:这种特殊功能的名称是什么?

**更新:

首先,感谢有关将其分为两个功能的建议。我不喜欢它的唯一原因是someObject可能有多个状态导致它有效或无效或其他。因此,someObject.isCaseOne()someObject.isCaseTwo()。所以如果我要检查每个状态,我会不得不为一个对象的多个状态做一个枚举?我觉得这是在引入不必要的代码:(

2 个答案:

答案 0 :(得分:3)

将其命名为fixIfInvalid

其中'fix'是输入无效时要做的事情。例如capitalizeIfInvalid

同意TJ,通常最好有两个功能。但“通常”总有例外。

编辑:在大多数情况下,我建议这个函数应该返回修复(或不修复)的对象。

所以,

ImaginaryFormInputClass myFormInput = WebPage.readInput();

myFormInput.fixIfInvalid().submitToDatabase();
// OR
Database.submit(myFormInput.fixIfInvalid());

关于你必须检查someObject.isCaseOne()someObject.isCaseTwo()的最后评论...这正是someObject.checkIsValid()函数的工作 - 您可以使用该函数将其他函数调用到检查对象的状态,并根据传递的函数做出总体决策(通常不超过2或3)。

方法调用其他方法来组合方法调用以使事情变得更简单,同时保持代码在不同的地方做不同的事情。

多年来,它被认为是软件工程的基本“最佳实践”,如果不是几十年,通过使用一个验证事物的函数和另一个修复无效事物的函数来解决您所描述的问题。

每个一般规则都有例外,但如果没有更清楚地了解为什么您的项目可能适合其中一个例外,则很难更具体。如果你没有清楚地理解你为什么要违背这个惯例,那么你似乎要走很长的路,在简化其他事情的过程中让事情变得更加复杂。

答案 1 :(得分:2)

我想我会使用两个单独的函数:一个用于验证,一个单独的函数可以在无效值的情况下执行某些操作。

如果真的想要将它们组合起来,那么我会明确地说明它,例如:validateAndIfInvalidThenX。 (即便如此,我还有两个独立的功能,它只会调用它们。)