1

実際のデータ ストレージの実装からリポジトリを分離しようとしています。この抽象化で簡単なクエリを作成するのにほとんど問題はありません。

例 注文明細の数を含む注文のリストが必要です。

リポジトリ メソッドは、OrderInfo オブジェクトのリストを返します。

class OrderInfo
{
    string Title { get; set; }
    int NumberOfLines { get; set; }
}

データ ストレージには、注文明細数を直接含むフィールドが含まれていないため、オンザフライで計算する必要があります。

これは、クエリがリポジトリ メソッドに直接記述されている場合、単純な SQL クエリ (count + group by) で簡単にアーカイブできます。

ある種の抽象化レイヤーを作成しようとすると、「注文ごとに注文行の数を返す必要があるなど、ストレージに依存するものを使用せずにクエリを定義する」方法がわかりません。

それとも、私は完全に間違った方向に進んでいますか?

4

1 に答える 1

0

BLLでのIQueryableの使用を許可したい場合(私はそうすべきだと思います)、必要なだけクエリを定義できます。DALがBLLで使用するために通過する必要がある基準の1つは、IQueryableを取得し、それを使用してデータを読み取ることができる必要があることです。このようにして、BLLを「賢く」することができ、DALが抽象化されます。

例:

  • BLL-インターフェースを使用して定義します。生成されたコンテキストインターフェイスは、システム内のすべてのエンティティ(=テーブル)を提供します。エンティティはで使用できますIQueryable<entityType>。エンティティは、EntityFrameworkPOCOを使用して定義されます。
  • DAL-コンテキストがBLLで定義したインターフェイスを実装するEntityFrameworkコンテキスト。

各レイヤーは独自のアセンブリにあります。DALは、依存性注入を使用して接続されています。

これは単なる例であることを忘れないでください。

アップデート

まさにあなたがやろうとしていることであるタマネギのアーキテクチャについてのこの記事を読んでください。

于 2012-09-24T17:47:33.523 に答える