0

コードを修正していますが、入力パラメーターの 1 つを変更してから何も返さないメソッドをたくさん見てきました。これがこれらのメソッドを設計する正しい方法であるかどうか疑問に思っています。例えば:

void addRespones (List<DTO> dtos, Set<String> codes){
     for (DTO dto: dtos){
          if (responses.contains(dto.getCode()){
               dto.setResponseOk(true);
          } else {
               dto.setResponseOK(false);
          }
     }
}

次に、addCodes を呼び出すメソッドで、応答の値に応じて何らかの処理を行います。

この使用法はまったく問題ありませんか、それともより良い一般的な慣行はありますか? 入力パラメーターを「出力」パラメーターとして頻繁に使用する傾向があるように思えます。オブジェクト指向なので、クラス DTO のメソッドを使用する必要があると考えました。たとえば、

for (DTO dto: dtos){
     dto.setResponseOk(codes);
}

そして、クラス DTO で:

boolean setResponseOk(Set<String> codes){
     if(codes.contains(this.getCode()){
          return true;
     }
     return false;
}
4

2 に答える 2

1

オブジェクト指向なので、クラス DTO のメソッドを使用する必要があると思いました

これは、コードベースと何をしようとしているのかによって異なります。

私はClean Codeの大ファンなので、addResponseメソッドはコードレビューで斧を手に入れたでしょう.応答コードの有限リストがあり、他の条件、変数、またはロジックがチェックに参加しないことが「確実」である場合応答コードの有効性。

このようにクラスをリファクタリングしたでしょう。

void updateResponseCode(List<Dto> dtos,Set<String> responseCodes){
    for (DTO dto: dtos){
        dto.setResponseCodes(codes);
    }

}

そして、DTO クラスで:

// it always preferable to have a single point of exit for a method
boolean isResponseOk(){
    boolean responseOk=false;
    if(codes.contains(code){
        responseOk=true;
    }
    return responseOk;
}

それ以外の場合は、1 つの方法を選択します。

   void resolveResponseCode(List<Dto> dtos,Set<String> responseCode){
   for (DTO dto: dtos){
       if (responses.contains(dto.getCode()){
           dto.setResponseOk(true);
        } else {
           dto.setResponseOK(false);
        }
    }

}

変更されたのはメソッド名だけであることに注意してください。

于 2013-07-22T12:46:32.323 に答える
0

与えられた例では、コレクションを渡していますが、変更が行われた場合は、参照渡しとして反映されます。

可能な変更は、変更後に同じコレクション オブジェクトを返す可能性があります。これにより、読みやすさが向上します。ただし、このアプローチでは 1 つのオブジェクトしか返すことができません。内部で 2 つの入力オブジェクトを変更している場合、このアプローチはトスになり、返すためにラッパー クラスを使用する必要があります。

addRespones() の特定の例では、 for ループをメソッドから引き出し、ループから addRespones を呼び出すことができます。これにより、内部で渡されたコレクションが変更されないようにすることができます。

于 2013-07-22T12:02:18.140 に答える