在Pojo内验证

时间:2011-09-10 06:20:32

标签: java

这更像是一个设计问题。

我有一个定义的POJO类,

class MyPOJO {  
    private String memberVariable;  
    MyPOJO(String memberVariable) {  
      validate(memberVariable);
      this.memberVariable = memberVariable;
    }  
}

我的问题是在验证memberVariable构造函数参数时我们可以走多远。以下验证方法是否可接受,

private validate(final String memberVariable) {
    Validate.isNotNull(memberVariable); // this is basic check.
    Validate.isTrue(memberVariable.indexOf(" ") == -1); //again a basic check.
    List<String> validValues = DBFactory.getDB().getValidValues();
    Validate.isTrue(validValues.contains(memberVariable)); // checks if the memberVariable value is present in db.
}

在POJO的构造函数中进行严格检查背后的论点是我们可以确定永远不会使用任何随机的memberVariable创建MyPOJO实例。 我的问题是这是否是一个好的设计方案?或者验证逻辑是否应该从POJO中拉出来?

3 个答案:

答案 0 :(得分:0)

简短回答:是的。为什么不呢?

答案很长:是的,但是......

  1. 如果验证失败,您打算做什么?你会抛出什么样的例外?
  2. 看来你可以将所有这些压缩到有效值的检查中,因为在有效值中不会有空值或间隔值(我假设)。

答案 1 :(得分:0)

恕我直言,这很好。如果某个对象无法使用非法参数进行实例化,则抛出非法参数异常总是有意义的。这也有助于保持对象不变。

答案 2 :(得分:0)

没有输入验证是POJO的一部分。这样您就可以保证创建的实例是正确的。通常,这称为Design-by-Contract