我想知道,对象验证的最佳实践是什么.对案例一或案例二有任何额外的争论吗?还有另外一种方法吗?
我不搜索任何验证库,我只想做简单的验证.
案例一
class A {
public void doSomething(MyObject o) {
try {
validate(o);
doSomethingUseful(o);
} catch (ValidationException e) {
Logger.getLogger().warn(e);
}
}
private void validate(MyObject o) throws ValidationException
{
if (o.getXYZ() == null)
throw new ValidationException("Field XYZ cannot be null");
}
private void doSomethingUseful(MyObject o) { //some funny stuff }
}
Run Code Online (Sandbox Code Playgroud)
案例二
class A {
public void doSomething(MyObject o) {
if (validate(o)) {
doSomethingUseful(o);
} else
Logger.getLogger().warn("Object is invalid");
}
}
private boolean validate(MyObject o)
{
if (o.getXYZ() == null) return false;
return true;
}
private void doSomethingUseful(MyObject o) { //some funny stuff }
}
Run Code Online (Sandbox Code Playgroud)
如果您只是吞下异常,并且验证方法只是私有的,那么case two您更喜欢,因为您不应该使用普通逻辑的异常.
如果你想让客户端处理你应该使用的异常,那么请使用case one它但不要吞下它.