1

Windows フォーム コントロールと LINQ を使用する場合、ビジネス レイヤーがデータを返す方法に「最適なオプション」はありますか?

現在、DataSource を返された DataTable に設定できるように、DataTables を返しています。より良いオプションはありますか?なんで?

public class BLLMatrix
{
    public static DataTable GetMaintItems(int iCat)
    {
        IQueryable<tblCaseNotesMaintItem> tItems = DALMatrix.GetCNTable();
        return
            (tItems.Where(item => item.CategoryID == iCat & item.IsActive).OrderBy(item => item.OrderID).Select(
                item => new { item.ItemID, item.ItemDescription })).CopyLinqToDataTable();
    }

internal static class DALMatrix
{
    internal static MatrixDataContext MatrixDataContext = new MatrixDataContext();

    internal static Table<tblCaseNotesMaintItem> GetCNTable()
    {
        return MatrixDataContext.GetTable<tblCaseNotesMaintItem>();
    }

私はこの同様の質問を見つけました --> Linq To SQL と DTO の懸念を分離する

4

5 に答える 5

4

個人的には、Data Transfer Objects の方が好きですが、DataSets はピンチで機能します。

基本的に、データ転送オブジェクト (ロジックを持たず、クライアント上で作業しようとしているモデルを表す) を使用している場合、それは前面の変更に関係なく存続できる抽象化であるという考えです。またはバックエンド。通常、これは良い考えです。

DataSet は便利ですが、数値/文字列ベースのフィールド アクセスのためにコンパイル時の安全性が欠如している (厳密に型指定された DataSet の場合ではありません) ことが問題を引き起こす可能性があります。

通常、データ転送オブジェクトと比較して、ワイヤ経由で DataSet をシリアル化する際には、大量のオーバーヘッドも発生します。

于 2009-08-19T15:08:28.977 に答える
1

DataSet のオーバーヘッドがあるため、独自のモデル クラスを作成するのが好きです。オブジェクト配列 (または IList インターフェイスを実装するもの) を返す場合でも、ほとんどの ASP.NET 要素の DataSource プロパティと同じ値を設定できます。

于 2009-08-19T15:16:53.703 に答える
1

個人的には、リンクを使用して DataSources を設定するのが好きですList<YourObject>

于 2009-08-19T15:17:34.780 に答える
1

ビジネス ロジックが Car、ICar、List(Car) などのオブジェクトのインスタンスを返すことを好みます。DAL にオブジェクトを入力させます。このようにして、データと UI を明確に分離できます。

于 2009-08-19T15:21:08.050 に答える
1

私はデータセットよりも DataReaders を使用するのが好きで、データ層で反復子ブロックを使用して datareader をIEnumerable<IDataRecord>. そこから、ビジネス層とデータ層の間に、その IEnumerable をIEnumerable<MyBusinessObject>. これをデータバインディングのためにプレゼンテーション層にも渡すことができるはずです。

私がこのアプローチを気に入っているのは、データ レイヤーとビジネス レイヤーをより適切に分離できるためです。ビジネス レイヤーはデータセットの観点から考えるべきではなく、データ レイヤーはビジネス オブジェクトの構築方法を知る必要もありません。これを別の層と考えると、両方の長所を活かすことができます。データ層またはビジネス層への変更は、ビジネス オブジェクトを構築するためのファクトリ コードを変更するだけでよいことを意味します。

于 2009-08-19T15:21:46.630 に答える