这更多是一个设计问题。
我有一个定义的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。