7

Stackoverflow コミュニティの皆様、こんにちは。

オプションの基準のリストが私のDAOに送信されるいくつかのコードに取り組んでいます。メソッド シグネチャには +/- 10 個のパラメーターのリストが含まれていますが、これはあまり好きではなく、再フォーマットしたいと考えています。さらに、基準を追加/削除したからといって、異なるレイヤーからすべてのメソッド シグネチャをリファクタリングする必要がないようにしたいと考えています。

List searchParams(String name, Long countryCode, ...){
...
}

になるだろう

List searchParams(HashMap<String,Object> map) {
    BeanUtils.populate(this,map);
    ...
}

柔軟性を得るためにマップで渡されるものの制御を放棄するため、これが起こるのはちょっと心配です。だから私の質問は、私が正しい道を進んでいるかどうかです。

4

4 に答える 4

14

このような状況に遭遇すると、Paramsクラスを作成してそれを渡す傾向があります。利点は次のとおりです。

  • を使用する場合とは異なり、Map意味のあるゲッター/設定、適切な検証などを行うことができます。
  • タイプセーフで自己記述的です (つまり、使用可能なパラメーターとそのタイプを簡単に見つけることができます)。
  • 中間レイヤーをリファクタリングすることなく、新しいパラメーターを追加できます。
于 2012-05-22T20:51:26.877 に答える
2

パラメーターのセットを保持/処理する新しいクラスを定義できるため、HashMap よりも少し詳細に制御できます。書くのが面倒、または少なくとも退屈ですが、柔軟性と制御のバランスが取れているようです。

于 2012-05-22T20:51:04.363 に答える
2

パラメータを見て、それらを論理グループとしてオブジェクトにラップできるかどうかを確認できます。たとえば、名前と国コードは人物オブジェクトである可能性があります

public Person {
    private String name;
    private String countryCode;
}

HashMap次に、このオブジェクトを渡すだけで、ゲッターを使用してデータを取得できます。これは、複数のレイヤーのすべてのキーを知る必要があるよりも、読みやすく、維持しやすいはずです。

于 2012-05-22T20:51:19.043 に答える
2

マップの使用が適切な唯一のケースは、ファクトリを設計していて、作成中のさまざまなクラスにさまざまな種類のパラメーターを渡す必要がある場合です。それ以外の場合はすべて、特殊なパラメーター情報クラスを使用したソリューションが優先されます。

マップを渡すことが適切な場所の例については、DriverManager.getConnectionメソッドを見てください。このメソッドは、Connection作成される のドライバー固有の実装のコンストラクターにパラメーターを渡す必要があるため、マップを にラップしProperties、ユーザーがそれを に渡すことができるようにします。ドライバー固有の接続。DriverManager将来的に保証される別のソリューションがないことに注意してください。

他のすべての場合にマップを使用することは強くお勧めしません。追加された柔軟性により、エラー検出がコンパイル時から実行時にシフトされ、信じられないほど頭痛の種が増える可能性が高くなります。

于 2012-05-22T21:00:31.690 に答える