3

私のプロジェクトの1つにデータアクセス用のクラスがたくさんありますが、データリーダーからデータを取得するコードのために、これらのクラスは非常にかさばっています。

私のコードは一般的に次のようになります。

// Execute the data reader
using (DbDataReader reader = command.ExecuteReader())
{
  while (reader.Read())
  {
     obj = this.FillDataReader(reader);
     objlist.Add(obj);
  }
}

internal SomeObject FillDataReader(IDataReader dr)
{
   SomeObject obj = new SomeObject ();


   if (!dr.IsDBNull(dr.GetOrdinal("objectID")))
   {
     obj.ID = dr.GetInt32(dr.GetOrdinal("objectID"));
   }

   return obj;
}

一部のFillメソッドは400行以上に簡単にヒットするので、これらを分離する適切な方法はありますか?部分的なクラスは受け入れられますか?理想的な世界では、私はORMを使用しますが、残念ながら、ORMの使用方法を学ぶ時間はありません。

4

3 に答える 3

4

確かに、部分クラスを使用して、Fillメソッドのコードを分割することができます。テンプレートシステムを使用してこれらの部分的なクラスファイルを生成することもできます。

とは言うものの、ORMはより単純なソリューションであり、ニーズが単純であれば、解決するのにそれほど時間はかかりません。

細かく制御する必要がない基本的なニーズの場合、LINQ to SQLは扱いやすく、VS 2010 /.NET4の一部として更新されると多くの人が考えていたのとは反対です。

もう1つのオプションはEntityFrameworkで、これもVS 2010 / .NET 4の一部として更新されます。これにより、より多くの制御が可能になりますが、もう少し学習が必要になる場合もあります。

これらの400行以上のFillメソッドを作成するのにどのくらい時間がかかりますか?その時間を使ってORMを学ぶことができなかったと思いますか?プログラマーは、常にcookie-cutterコード(たとえば、ADO.NET Fillメソッド)を作成する必要があると感じるべきではありません。プログラミングの喜びをすぐに奪うことができます。

于 2009-10-26T10:52:29.520 に答える
0

部分クラスはコードを分離するのに役立ちますが、ファイルは同じプロジェクトにある必要があります。これが必要ない場合は、data-access-classesから新しいクラスを継承しないのはなぜですか?

于 2009-10-26T10:55:16.893 に答える
0

データリーダーからヘルパークラスまたは拡張メソッドに値を抽出するコードを移動できます。

例えば:

 public int GetIntOrDefault(this DataReader dr, string fieldName, int defaultValue){
     var value = dr.GetOrdinal(fieldName);
     return (!dr.IsDBNull(value)) ? dr.GetInt32(value) : defaultValue;
 }

 internal SomeObject FillDataReader(IDataReader dr)
 {
    SomeObject obj = new SomeObject ();
    obj.ID = dr.GetInt32OrDefault("objectID", 0); // 1 line instead of 4
    ...
    return obj;
 }

これでしばらくは改善されますが、ORMを試すことをお勧めします。生のSQLに多くの投資をしているので、IBatisはアプリで簡単に使用できるようですそして、他の多くのORMも簡単です。

于 2009-10-26T11:07:24.480 に答える