0

以下はメソッドの 1 つのコードです。また、同様の検証が多くのメソッドに散らばっています。

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見た目はすっきりしていますが、列挙型がフォーム ハンドラーと逆の依存関係を持っていることに満足していません。ご覧のとおり、enum での呼び出しが多すぎます。これfh.method()は、代わりにフォーム ハンドラーでコードを使用する方がよいことを示唆しています。

列挙型を微調整するか、これをリファクタリングするより良い方法はありますか?

4

0 に答える 0