1

現在、JDBCを介して処理され、ResultSetを返す関数内にラップされている10の異なるクエリがあります。これらの各ResultSetオブジェクトは、外部プログラムによって繰り返され、要件ごとの列名ではなく、インデックスを介してアクセスされます。私は検討している3つのアプローチがあり、純粋なOO設計に可能な限り近づけながら、これを処理する方法に関する現在のベストプラクティスを探しています。これで、私のスキーマは次のようになります。

create table Cats
(  
    name varchar2,
    age number,
    length number,  
    location varchar2,
    isStray varchar2
); 

私のクエリの2つはそのようなものです:

 public ResultSet getAllCats()  
{  
    Select * from Cats;  
}  

public ResultSet getCatAgeAndName(){
    Select cat.age,cat.name from Cats cat
}

今、私がこれらのプロパティにアクセスすることを検討したアプローチResultSet.getXXX(index);

以下の通り:

public static final int GET_CAT_AGE_AND_NAME_AGE_INDEX = 1;   
public static final int GET_CAT_AGE_AND_NAME_NAME_INDEX = 2;   

また

public enum GetCatAgeAndNamePosition  
   {  
      AGE(1),
      NAME(2);
   }

また

 public class GetCatAgeAndNameQuery  
 {  
      public enum Position  
      {  
           AGE(1),
            NAME(2);
      }  

      private ResultSet results;
 }  

最初のアプローチは、クエリごとのインデックスごとに1つの静的ファイナルです。
2つ目は、クエリごとの列挙型です。
3つ目は、クエリごとのクラスです。

これを純粋で保守可能に保つための上記またはその他の洞察のどれが利用可能です。

4

1 に答える 1

0

私はsを使うのが好きenumです。それらは柔軟性を追加します。たとえば、列の序数値と名前の両方を指定できます。序数ではなく名前で取得すると、物事がより堅牢になります。のようなクエリでも安全ですSELECT *。を使用するenumと、情報など、より多くの情報を簡単に関連付けることができtypeます。テーブルのメタデータに基づいてこれらのクラスを生成すると便利です。

enum私は、テーブル、ビュー、またはストアド プロシージャで動作するサービス クラスのプライベート メンバーとして使用する傾向があります。リレーショナル構造から結果の Bean へのマッピングを行うために内部的にのみ使用されます。リレーショナル構造は外部に公開する必要がないため、enum. enum同じ基本構造に対する複数の関連クエリに同じものを再利用するのも良いことです。あなたの例でenumは、テーブルのすべての列が必要であり、さまざまなクエリが列のすべてまたは一部を使用します。インデックスよりも名前の方が優れているもう 1 つの理由があります。

于 2012-09-07T14:06:58.587 に答える