1

メソッドの呼び出し中に null の引数を検証する最良の方法は何ですか?

1) メソッド呼び出しを行う前

private void myMethod(String param1, String param2){
   String a = param2;
   if(StringUtils.isNotBlank(a)){   
      validate(a);
   }
}

private void validate(String a) {
    int temp = Integer.parseInt(a);
    if(a > 4){
          addError()
    }
}

2) 引数を受け取ったら、メソッド内

private void myMethod(String param1, String param2){
   String a = param2;
   validate(a);       
}

private void validate(String a) {
     if(StringUtils.isNotBlank(a)){
         int temp = Integer.parseInt(a);
         if(a > 4){
            addError()
         }
     }
}

または両方

4

6 に答える 6

4

IMOStringUtils.isNotBlank(a)は、何らかの形式の検証のみであるため、validate()メソッドに含める必要があります。そして、メソッドを呼び出すたびにそれをチェックする必要がある場合はvalidate()、確かにそこに移動する方が理にかなっています.

于 2014-01-30T18:15:04.547 に答える
2

あなたが与える2つのアプローチから、2番目の方が優れています。

理由: DRY の原則(コードの重複を避けるため、自分自身を繰り返さないでください)。

最初に切り取られた重複 (または 3 重複など) のコードは、すべての場所のコードの「空白のチェック」部分validate()が呼び出されます。

validate()また、一貫性の責任、「空白でない」不変条件 (ドメイン/ビジネス ルール) はメソッドに属します (固有です) 。

実際には、このドメイン ルールに変更を加える可能性を考えてみましょう。新しいチェックを追加する必要がある場合、変更が少なくて済みます (したがって、エラーが発生しにくくなります)。変更を行う開発者は、そのようなルールをどこで見つけると予想しますか? コードベース全体にvalidate()散らばっていますか?

于 2014-01-30T18:16:16.433 に答える
0

概念的には、validate() メソッドは、渡されたパラメーターが null かどうかを識別できる必要があります。したがって、特定のシナリオでは、このアプローチ2が望ましいはずです。

于 2014-01-30T18:20:01.580 に答える
0

をスローするメソッド内になりjava.lang.IllegalArgumentExceptionます。お気に入り:

private void validate(String a) {
 if(StringUtils.isNotBlank(a)){
     int temp = Integer.parseInt(a);
     if(a > 4){
        addError()
     }
 }
else{
    throw new IllegalArgumentException("argument must not be null or blank");
}

}

于 2014-01-30T18:18:52.313 に答える