从对象关系验证空参数的更好方法是什么

时间:2013-12-04 14:01:11

标签: java verification relationships

我对关系验证提出了一个很好的问题。

按照以下三个类来设想问题:

public class Son {

    private Integer idSon;
    private String name;
    private Father father;
}

public class Father {

    private Integer idFather;
    private String name;
    private GrandFather grandFather;
}

public class GrandFather {

    private Integer idGrandFather;
    private String name;
}

遵循这些原则,我们假设我们要进行关系验证, 相反,每次我们在“代码的不同部分”执行此类操作时:

Son son = new SonBusiness().getById(idSon); //Get a Son from database
if(son.getFather == null){
    throw new Throwable("Father's Son does not exist");
}

不会更好地创建一些方法,如:

public void verifySonsDatas(Son son, Bollean verifyFather, Boolean verifyGrandFather) throws Throwable{
    if(son == null){
        throw new Throwable("Son does not exist");
    }
    if(verifyFather){
        if(son.getFather == null){
            throw new Throwable("Father's Son does not exist");
        }
    }
对于任何儿子的关系,等等......

有人同意使用这种方法我们可以避免许多冗余代码,我们可以将验证集中在一个独特的方法中......?

如果我们考虑10个关系,想象一下if(object == null)它对我来说似乎不是一件好事。

谢谢!

5 个答案:

答案 0 :(得分:0)

我宁愿建议您找到代码的相应部分,您只需要检查一次或两次。你为什么要把这张支票叫两次以上?如果1.你保存一个儿子或2.从数据库中加载儿子,这不足以检查这个吗?

答案 1 :(得分:0)

我认为如果您必须将上述检查放在很多地方,并抛出一些带有预定义消息的Exception,那么这种方法至少会提供一个理由(即所有异常都将在中心位置进行管理)因此它是有效的 我建议您应该分别使用不同的功能来单独检查SonFatherGrandFather等等,并使用这些boolean条件构建方法。

但是如果这个例外,只是抛出没有任何意义,那么你应该考虑放置obj == null检查你需要检查它们。

您还可以阅读Avoiding != null statements了解相关信息。

答案 2 :(得分:0)

如何实现某种接口来指定系列的继承(呵呵)。

interface IChild {
    abstract int GetParent();
}

儿子:

Son implements IChild 

@override 
int GetParent() { return this.father.idFather; }

父亲:

Father implements IChild 

@override 
int GetParent() { return this.grandFather.idGrandFather; }

答案 3 :(得分:0)

如果null是合同的一部分,那么我想是的,创建一个帮助方法比在整个地方重复相同的代码要好。然而,更好的选择是以某种方式避免这种情况。例如,请考虑以下事项:

public Son(int idSon, String name, Father father) {
    if (father == null) {
        this.father = new Father(0, "Unknown", null);
    }
}

或者如果nulls是非法的,那么使构造函数成为异常的委托:

public Son(int idSon, String name, Father father) {
    if (father == null) {
        throw new IllegalArgumentException(
            "Children must have parents to be born."
        );
    }
}

如果某个对象在其自己的规范中无效,那么根本不构建它就更有意义。

最后,您正在检查null并抛出异常:

if(son.getFather == null){
    throw new Throwable("Father's Son does not exist");
}

为什么要这么麻烦?如果nulls是非法的,为什么不得到NullPointerException?

答案 4 :(得分:0)

确实存在许多实现它的方法。 但在我的情况下,我不能创建一个规则,如“不能存在任何关系== null”或任何其他实现,因为在不同的行动,我有不同的方法,有时我会验证儿子的父亲为例。另一个我要验证父亲和祖父的儿子, 我的方法需要灵活和通用。 我已经分析了什么 kjhf 说了我,用另一种方式实现它,而不是强制实现的参数......有些情况我有三个关系,另一个我五个,另一个只有一个。 无论如何,我试图找到一些方法只做一次,所有对象使用相同的方法。 现在我在每个引用一个实体的业务类中创建一个新方法。然后,如果我有10个实体,逻辑上我有10种验证方法。 如果其他人有一些想法,拜托,我在等。

谢谢大家。