0

下面是其中一种方法中的代码。此外,许多方法中散布着类似的验证。

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(),这表明代码在表单处理程序中会更好。

有更好的方法来调整枚举或重构它吗?

4

0 回答 0