3

データベースでユーザーを検索し、そのアドレスと所属するチームを返すJavaのメソッドがあるとします。

メソッドから両方の値を返したいのですが、データベース呼び出しが含まれ、分割には2倍の呼び出し回数が含まれるため、メソッドを2つに分割したくありません。

中規模から大規模のソフトウェアプロジェクトでの典型的な懸念を考えると、最良の選択肢は何ですか?

whatGoesHere getUserInfo(String name) {
  // query the DB
}

質問は既存の質問と重複しているように感じますが、お互いの質問には、この例とは十分に異なる要素が含まれているため、もう一度質問する価値があると思いました。

4

6 に答える 6

9

いくつかのオプションがあります。ほとんどの OOP は、これらの 2 つのプロパティをカプセル化するクラスを作成します。

private class UserInfo {
  private Address address;
  private Team team;
}

または、単純なソリューションが必要な場合は、オブジェクトの配列を返すことができます:

Object[] getUserInfo(String name) {
  // query the DB
  return new Object[]{address,team};
}

または、このメソッドをいくつかのライブラリに公開したい場合は、次のように、それらのプロパティを使用するインターフェイスを持つことができます。

class APIClass{
  interface UserInfo{
    public Address getAddress();
    public Team getTeam();
  }

  UserInfo getUserInfo(String name) {
    // query the DB
    return new UserInfo(){
         public Address getAddress(){ return address; }
         public Team getTeam(){ return team; }
    };
  }
}
于 2012-07-04T03:28:17.667 に答える
0

Guavaには既にジェネリック クラスがあると思っていましたPairが、見つかりません。Java 1.5+ を使用している場合は、ジェネリックを使用して独自のものを構築できます。

public class Pair<X,Y>
{
    public final X first;
    public final Y second;

    public Pair(X first, Y second) {
        this.first = first;
        this.second = second;
    }
}

フィールドをプライベートにしてゲッターを追加してください。:) 使い方は簡単です:

return new Pair<Address,Team>(address, team);

アップデート

Apache Commons LangにはPair. その他のオプションについては、この SO の質問を参照してください。

于 2012-07-05T00:06:11.210 に答える
0

ユーザー名とグループ名を含む String 配列を返すことができます。メソッドは次のようになります。

public String[] getUserInfo(String name) {
    String[] result = new String[2];
    // query the DB
    ...
    result[0] = userName;
    result[1] = groupName;

    return result;
}
于 2012-07-04T03:38:56.770 に答える
0

まず、抽象化、関係、および多重度を適切にモデル化します (以下の例を参照)。その後、それに応じてテーブルをモデル化できます。これらの 2 つの手順を実行したら、オブジェクト グラフをロードするように構成できるJPAを利用するか、JDBC コードを記述し、適切な SQL JOIN を使用して SQL クエリを実行してグラフを作成します。

  • ユーザーはアドレスを持っています
  • チームは 1 人以上のユーザーを持つことができます (また、ユーザーは複数のチームでプレーできますか?)
于 2012-07-04T03:34:40.920 に答える
0

マップが役に立たない、MultivalueMap。キーはユーザー名で、2 つの値は住所とチーム名です。Address と team の両方が String 変数であると想定しています。Multivalue Map の詳細については、こちらを参照してください。

http://commons.apache.org/collections/apidocs/org/apache/commons/collections/map/MultiValueMap.html

http://apachecommonstipsandtricks.blogspot.in/2009/01/multi-value-map-values-are-list.html

于 2012-07-04T03:27:47.673 に答える
0

この種の問題に対する一般的な解決策は、返す値と同じ数の属性を持つカスタム オブジェクトを作成することです。このための新しいクラスを作成できない場合は、 を使用できますがMap<String, Object>、このアプローチはタイプ セーフではありません。

于 2012-07-04T14:14:18.963 に答える