質問
私は、ASP.NET 2.0のWebサイトを開発しています。私は、データアクセスとビジネスロジック層を作成しました。今、プレゼンテーション層では、私がデータセットとして、ビジネス層からデータを返すいます。
私の質問は、(例えば、私のデータベース内のカテゴリテーブルを表すCategoryオブジェクト)をデータセットまたはオブジェクトのコレクションを使用するかどうかです。私は、データベース・テーブル(共通オブジェクト)にマッピングされているすべてのクラスを定義しています。しかし、私は、プレゼンテーション層でカテゴリテーブルからすべてのレコードを必要とする状況があります。私は混乱しています。私は何をすべきでしょうか?
解決
あなたがオブジェクトを返すようにしたい、データセットを返すようにしたくありません。
あなたは、データアクセス層とビジネスロジック層を持っている場合、は、一般的に、あなたはまた、エンティティ層を持っていることになるでしょう。エンティティ層は、データベース結果セットのメモリrepersentationであろう。あなたは、データベースから1行を返す場合は、1つのentitiyオブジェクトをロードします。あなたが複数の行を返す場合は、プレゼンテーション層によって消費されるように、各行のためのエンティティをロードし、エンティティのコレクションを返します。
は、.NET 2.0を使用していて、上記の例のために、あなたはこれらのコレクションへのコントロールの種類をエンティティタイプの一般的なコレクションを作成し、簡単にバインドすることができます。
は、これはあなたのために有用であると思います。
他のヒント
私は、オブジェクトまたはIEnumerableを/のIListなどのオブジェクトを返すお勧めします。
あなたのDBアクセスによっては、手動でカテゴリオブジェクトのリストを読み込むか、非常に迅速にLINQ2SQLまたはADO.NET Entity Frameworkのようなものを使用して、必要なそれらをキャッシュする場合はすることができます。
私は、状況に応じて両方の方法を使用しました。あなたが唯一のグリッドのテーブルからデータを表示する必要がある場合、フィールドがテーブルに追加されている場合、彼らは自動的にあなたが自動投入されていると仮定すると...グリッドに表示されますので、データセット(またはデータテーブル)メソッドはひどいではありません列のグリッド。私は、拙速な方法のより、この方法を見てみます。
私は、すべてのデータセットを返しません。あなたはしっかりとあなたのデータベースへのサービスに結合されています。将来的にはあなたのデータベースは、データセットを使用して何かを変更することを余儀なくされます進化するとき。あなたは、データベースとサービスの間に抽象レイヤを作成したい。
私は、オブジェクト/コレクション溶液でいいと思います。だから、あなたは、あなたが一般的なコレクションを使用したいいくつかを返品する場合は、一つのオブジェクトを持っているテーブルから1行を返却する場合。ジェネリックコレクションはボクシング/アンボクシングのヒットを避けることができます。
[編集]私はそれに殴られたようです[/編集]
は、データベース内の各テーブルを表すクラスを持つ、実体層を作成する必要があります。そして、これらのクラスのリストを返します。