枚举作为验证者

时间:2013-10-17 21:58:45

标签: java validation enums

以下是其中一种方法中的代码。此外,许多方法都有类似的验证。

if (!isAgreeTermsAndConditions()) {
     addException(Messages.AGREE_TERMS_AND_CONDITIONS);
} else {
      if (!validationManager.isValidSsn(getSsn())) {
          addException(Messages.INVALID_SSN);
      }
      if (!validationManager.isValidDate(getBirthYear()) {  
            addPropertyFormException(Messages.INVALID_DATE_OF_BIRTH);                                                                                      
       }
   }  
}  

作为重构的一部分,我提出了以下方法。基本上,将验证逻辑移动到枚举

 class MyFormHandler{
                  public void submitOrder(){
                        MyFormHandlerWorker.SUBMIT_ORDER.validate(this);
                 }

                  public void addItemToCart(){
                      MyFormHandlerWorker.ADD_TO_CART.validate(this);
                  }

                  public void removeItemFromCart(){
                        MyFormHandlerWorker.REMOVE_FROM_CART.validate(this);
                   }
        }

        enum MyFormHandlerWorker{
          SUBMIT_ORDER{
               validate(MyFormHandler fh){
                      //perform validations 
                      if (!fh.isAgreeTermsAndConditions()) {
                          fh.addException(Messages.AGREE_TERMS_AND_CONDITIONS);
                      } else {
                           if (!fh.getValidationManager().isValidSsn(fh.getSsn())) {
                               fh.addException(Messages.INVALID_SSN);
                            }
                            if (!fh.getValidationManager().isValidDate(fh.getBirthYear()) {  
                              fh.addPropertyFormException(Messages.INVALID_DATE_OF_BIRTH);                                                                                      
                            }
                        }  
                   } 
               }
           };

         public abstract void validate(MyFormHandler fh);
        }

在移动验证之后,MyFormHandler看起来更干净,但是对于枚举与表单处理程序的反向依赖性不满意。可以看出,枚举上有太多fh.method()次调用,这表明代码在表单处理程序中会更好。

任何更好的方法来调整枚举或重构这个?

0 个答案:

没有答案