java - 具有多项检查的 void 方法重构

标签 java refactoring

我有这个方法:

public void validate(param1, pararm2, param3 ...) {
    if(check1)
        add error
        return
    if check2
        add error
        return
    getDbObject
        check3
        exception
            return

还有另一个用例,除了上述检查之外,如果通过了 check1 和 check2,那么在 check3 之后应该返回 db 对象。 实现它的最佳做法应该是什么?

我应该写一个新的方法来进行相同的检查并在 check3 之后返回 db 对象,还是添加更多参数并简化现有方法?

我读到的最佳实践是最多有 5 个参数,所以如果我们添加更多参数,最终第一个方法调用将有 8-9 个参数 如果我们减少参数的数量,那么每次调用都需要更多的检查(if 语句),这也违反了 OOP 的基本原则。 那么有替代方案吗?

最佳答案

我会重写以使用异常,故意返回 null 对调用者没有帮助,可能是这样的:

public DbObjectType validate(param1, param2, ...) throws Check1FailedException, Check2FailedException, Check3FailedException {

    check1();
    check2();
    check3();

    return getDbObject();
}

private check1() throws Check1FailedException() {
    //DoCheck and throw Exception if failed
}

private check2() throws Check2FailedException() {
    //DoCheck and throw Exception if failed
}

private check3() throws Check3FailedException() {
    //DoCheck and throw Exception if failed
}

关于java - 具有多项检查的 void 方法重构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48960402/

相关文章:

java - 关于redis最大内存策略

java - java中的批处理代码

java - eclipse `allow output folders for source folders`

angular - 跨所有组件共享模态

javascript - 在postman中创建常用函数或包含js文件?

jquery - 重构 jQuery 代码块?

java - 寻找Java嵌入式数据库框架/引擎

java - 为列表中的每个项目重复 Spring Batch 流程的步骤

Python:子类可以重载继承的方法吗?

android - 组织 Android 代码的最佳实践