4

レガシ C# .NET 1.1 アプリケーションを現代に持ち込もうとしています。ビジネス オブジェクトである可能性があるもののコレクションには、DataTables を使用します。

ほとんどのコードが DataRow のインターフェイスと対話していると考えていることを考えると、どのジェネリック コレクションを使用すれば最も簡単に移行できるでしょうか?

4

4 に答える 4

7

質問を正しく読んでいる場合は、どのコンテナがビジネス オブジェクトのリストを格納するだけで、コレクションを列挙するか、インデックスを介して選択できるようにするかを尋ねています。

リストを調べることを検討します<>

ここで、メソッドは IList<> (インデックスにアクセスするため) または IEnumerable<> (コレクションで foreach ループを使用するため) のいずれかを受け入れます。

例えば

private void PrintAll<T>(IEnumerable<T> items)
{
    foreach(T item in items)
        Console.WriteLine(item.ToString());
}

List<> と通常の配列を含む IEnumerable<> インターフェイスを使用する任意のコンテナーを渡すことができるようになりました

List<Person> people = new List<Person>();
//add some people to the list
PrintAll<Person>(people);

ビジネス オブジェクトを含む n 層アプリのサンプル

HTH

骨格

于 2008-12-19T04:31:15.833 に答える
4

DataSet/DataTable API から変更する代わりに、DataTable と DataRow をビジネス ロジックに適した型にサブクラス化しませんか?

サブクラス化された DataRow および DataTable オブジェクトのサポートは優れています。古いコードとの下位互換性とともに、新しいコードで必要な強力な型付けが得られます。さらに、必要な場所や必要な場所にビジネス ロジックを挿入できます。

于 2008-12-19T04:27:12.627 に答える
2

慣れている場合はDataTable、おそらく、アダプタ(など)がもたらす変更の追跡と永続性のサポートに慣れています。その場合、LINQ-to-SQLやEntity Frameworkを検討しましたか?これらは両方とも、豊富なチャネル追跡と自動永続化をサポートすると同時に、構成可能なクエリやその他すべてのLINQの優れた点など、他のさまざまなDALユースケースを提供します。

間違いなく調査する価値があります。

型付きPOCOエンティティ(つまりDataRow、そのサブクラスではない)への変更は依然として大きな逸脱であるため、単純な変更ではないことに注意してください。大きな変更を行う時間がない場合は、DataTable(おそらく入力して)固執するのが現実的です。

これにより、などが提供さEntitySet<T>れます。または、アドホックな使用のためになどをIQueryable<T>使用することもできます。List<T>Collection<T>

于 2008-12-19T08:37:37.300 に答える
2

「アプリケーションを現代に」持ち込む最も簡単な方法は、コードを Visual Studio 2003 から 2005 または 2008 にアップグレードすることです。 DataSet、DataTable、および DataRow が部分クラスとして実装されているという事実から、それがわかります。

上記のソリューションは、変更の追跡を含め、多くのものを失います。LINQ to SQL、Entity Framework などはすべて変更の追跡を提供しますが、DataRow のようにオブジェクトに作業単位の追跡を直接配置するのではなく、db への接続のための作業単位メカニズム内にあります。

願わくば、単純に「アプリケーションを現代に合わせる」ために変更するのではなく、あきらめようとしている機能と費やしている労力に対して得ようとしているいくつかの利点があることを願っていますか?

ところで、これはすべて Typed DataSets を使用していることを前提としています...私の意見では、型指定されていない DataSet オブジェクトは、ほとんどの場合、ばかげています。

于 2009-01-09T16:49:14.653 に答える