Java中的简单对象验证

jk_*_*jk_ 7 java validation

我想知道,对象验证的最佳实践是什么.对案例一或案例二有任何额外的争论吗?还有另外一种方法吗?

我不搜索任何验证库,我只想做简单的验证.

案例一

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)

Leo*_*ngs 7

如果您只是吞下异常,并且验证方法只是私有的,那么case two您更喜欢,因为您不应该使用普通逻辑的异常.

如果你想让客户端处理你应该使用的异常,那么请使用case one它但不要吞下它.

  • +1代表'不应该使用普通逻辑的例外' (3认同)