这更多是一个设计问题。

我有一个定义的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的构造函数中进行严格检查的背后的观点是,我们可以确保不会使用任何random memberVariable创建MyPOJO实例。
我的问题是,这是否是一个好的设计方案?还是应该将验证逻辑一起从POJO中拉出来?

最佳答案

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

10-07 19:31