2009-08-19 10 views
1

WindowsフォームコントロールとLINQを使用する場合、Buisinessレイヤがデータを返す方法に「ベストオプション」がありますか?WindowsフォームコントロールとLINQ;私は何を返すべきですか?

今すぐDataTableを返すので、返されたDataTableにDataSourceを設定できます。より良い選択肢がありますか?どうして?

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>(); 
    } 

は、私がこれと同様の問題を発見した - > Separating concerns with Linq To SQL and DTO's

答えて

4

は個人的に、私はデータ転送オブジェクトを好むが、データセットは、ピンチで働きます。

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

DataSetsは便利ですが、数値/文字列ベースのフィールドアクセスのために、コンパイル時の安全性が欠けています(強く型付けされたデータセットではありません)。

一般的に、データ転送オブジェクトと比較して、データセットをワイヤでシリアル化すると、オーバーヘッドが大きくなります。

+0

DataTablesを含むDataSetを記述するときは、正しいですか?また、DTOの良い例がありますか?私はGoogleになりますが、もしあなたが良いものを持っていれば、私は推奨を好むでしょう。 –

+1

@Refracted Paladin:ウィキペディアにはデータ転送オブジェクトの良いエントリーがあります:http://en.wikipedia.org/wiki/Data_transfer_object 2009年8月号のMSDNタイトル「データ転送オブジェクトの長所と短所」の記事。http://msdn.microsoft.com/en-us/magazine/ee236638.aspx – casperOne

1

DataSetsのオーバーヘッドのために私自身のモデルクラスを作成するのが好きです。オブジェクト配列(またはIListインターフェイスを実装するもの)を返す場合でも、ほとんどのASP.NET要素のDataSourceプロパティと同じように設定できます。私は個人的に私は、このような車、ICARまたはリスト(カー)として、オブジェクトのインスタンスを返すためにビジネスロジックを好むリンクを使用している場合List<YourObject>

+0

*「ほとんどのASP.NET要素。 "* ....これはWinFormコントロールにも当てはまりますか? –

+0

WinForm要素は、オブジェクトのIListも使用できる必要があります。 – CSharpAtl

+0

ありがとう、私はそれを調べます。 –

1

は、DALは、のためにオブジェクトを移入してみましょう君は。このようにして、データとUIを明確に分離します。

1

に自分のデータソースを設定したいと

1

私はデータセットではなくDataReaderを使いたいのですが、私はデータレイヤーのイテレータブロックを使用して、データレアダーをIEnumerable<IDataRecord>にします。そこから、IEnumerableをIEnumerable<MyBusinessObject>に翻訳するために、ビジネス層とデータ層の間にある種のステップがあります。データバインディングのためにプレゼンテーションレイヤーにこれを渡すことができます。

私は、データレイヤーとビジネスレイヤーを分けるのが良いという理由から、このアプローチが好きです。ビジネスレイヤーはデータセットの観点から考えるべきではなく、データレイヤーはビジネスオブジェクトの構築方法を知る必要がありません。私がこれを別の層と考えると、私は両方の世界のベストを得ます。データまたはビジネス層の変更は、ビジネスオブジェクトのその構造のファクトリコードを変更するだけで済むことを意味します。

関連する問題