Windowsフォームは、コントロールとLINQ。私は何を返す必要がありますか?
-
18-09-2019 - |
質問
Windowsフォームコントロールを使用してLINQはあなた・ビジネス層はデータを返す方法については、「最良の選択肢」がある場合は?
私はその後、戻ったDataTableにデータソースを設定することができるよう、今、私はDataTableのを返しています。より良いオプションはありますか?なぜ?
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のへと懸念を分離する - 私はこれと同様の問題を発見しましたSQLとDTOの
の解決
個人的には、データ転送オブジェクトを好むが、データセットは、ピンチで動作します。
基本的には、アイデアは、あなたが(何のロジックを持っていない、とあなたは、クライアント上で動作するように探しているモデルを表す)データ転送オブジェクトで作業している場合、それは変更にかかわらずに生きることができる抽象化であるということですフロントやバックエンドで。それは、典型的には良い考えです。
データセットは有用であるが、あるため、数値/文字列ベースのフィールドアクセスのコンパイル時の安全性(ではない、強く型付けされたデータセットの場合が)の欠如が問題を提起することができます。
一般的に、オーバーヘッドの大量データ転送オブジェクトに比べワイヤ上のデータセットをシリアル化でもある。
他のヒント
私はので、データセットのオーバーヘッドの私自身のモデルクラスを作成したいです。あなたがオブジェクト配列(またはIListインターフェイスを実装して何かを)返す場合、あなたはまだ、ほとんどのASP.NET要素のDataSourceプロパティにそれが等しくなるように設定することができます。
List<YourObject>
するためのリンクを使用している場合、私は個人的に私のデータソースを設定したい。
私は、DALがあなたのためにオブジェクトを移植してみましょう、そのような車、ICARまたはリスト(カー)として、オブジェクトのインスタンスを返すためにビジネスロジックを好みます。この方法で、あなたは、データとUIの間に明確な分離を維持します。
私はむしろ、データセットよりものDataReadersを使用したい、と私はIEnumerable<IDataRecord>
にDataReaderを回すためにデータ層でイテレータブロックを使用します。そこから、私はIEnumerable<MyBusinessObject>
にIEnumerableをすることを翻訳するために、ビジネスとデータ層との間に余分なステップのようなものを持っています。あなたにもデータバインディングのためのプレゼンテーション層への上にこれを渡すことができる必要があります。
それはデータとビジネス層を分離する、より良い仕事をしていませんので、私は、このアプローチが好きです。私は別の層と考えるならば、私は両方の長所を取得します。データまたはビジネス階層への変更は、それが私のビジネスオブジェクトを構築するために、私は唯一の工場出荷時のコードを変更する必要があることを意味します。