2

説明: 私はいつも、すべてのパラメーターを常にチェックしているため、多くの if チェックと try キャッチが発生すると言われています。

質問: 以下のコードでは、例外処理を処理するメソッドのみが、リファクタリングされたプライベート ヘルパー メソッドではなく、公開されているルート メソッドにあるようにコードをクリーンアップしました。この練習は大丈夫ですか?

発生する可能性のあるメソッドの近くで例外を処理していませんが、コードははるかにクリーンです。

コードノート:

  • メソッド validateInputs() は含まれていません。
  • ParameterObject a は、たとえば「someCode」で作成されたパラメーターから派生したもので、渡したいパラメーターを表します。2 つ以上のパラメーターが必要な場合はいつでも、それらのパラメーターをパラメーター オブジェクトにリファクタリングします。

コード:

public class UnderTest {

    public UnderTest() {}

    public boolean runWork(  String someValue ) throws CustomException
    {
        try
        {
            validateInputs();
            // someCode
            .
            .
            processWork(  ParameterObject a );
        }
        catch( Exception e )
        {
            logError(e);
        }
    }

    private void processWork( ParameterObject a  )
    {
        Operation1( ParameterObject a  );
        Operation2( ParameterObject a  );
    }

    private void Operation1( ParameterObject a  )
    {
        // someCode
    }

    private void Operation2( ParameterObject a  )
    {
        // someCode
    }

    private void logError(Exception e)
    {    
        throw new CustomException(e,"Message");
    }        
}
4

2 に答える 2

1

私は両方のビットを選ぶでしょう。入力の検証は常に良い考えであり、 Apachecommons-lang クラスなどのライブラリValidateを使用するとこれが簡単になります。一般的に、引数が正しくないと、実行時例外が発生します(通常はIllegalArgumentExceptionまたはNullPointerException)。入力検証を行うためにプライベートメソッドにどれだけ深く入り込むかは、好みの問題です。無効な引数を見つけるのが早ければ早いほど、エラーメッセージが役立つことを覚えておいてください。

もちろん、これは、公開されているAPI(理想的には内部メソッドも)を適切に文書化することを前提としています。入力に何が有効かを明確にします。

于 2012-07-30T13:04:15.083 に答える
1

パブリックAPIによってクラスに入るときに、引数をチェックする傾向があります。プライベートメソッドでは、アサーションによってのみチェックするか、まったくチェックしません。これは、私が自分のクラスをもう少し信頼していることを意味します。

于 2012-07-30T13:21:10.147 に答える