この質問には次のレイヤーが関係しています。
- サービス層(IoCを使用してリポジトリを呼び出す)
- ドメインモデル(POCO /ドメインエンティティ、定義されたリポジトリインターフェイス)
- リポジトリレイヤー(EF .edmxおよび実装されたリポジトリ)
多くの場合、これは非常に簡単です。リポジトリレイヤーは、Entity Frameworkを介してデータベースにクエリを実行し、IList<SomeDomainEntity>
サービスレイヤーである呼び出し元に戻ります。返されるタイプは、ドメインモデルで定義されたタイプです。
私が遭遇している問題は、POCO A、B、およびC間でクエリを実行し、返されるすべてのデータを取得する必要がある場合です。リポジトリ内のロジックを処理しないため、このデータをサービスレイヤーに戻して処理する必要があります(直接、またはドメインモデルでロジックを呼び出すことにより)。ただし、リポジトリクエリの結果から呼び出し元に返す単一のタイプはもうありません。
もちろん、匿名タイプは、私が見る例でこれを処理しますが、リポジトリ内で返されたデータからそのロジックを直接処理しておらず、返す必要があるため、返すには物理タイプが必要です。これが私が考えたいくつかの解決策ですが、私が好きかどうかはわかりません:
- ドメインモデルに新しいドメインエンティティを作成します。これは、基本的に、クエリしたすべてのデータの合成であるため、この新しい単一のタイプが返される場合があります。これは、満足のいくクエリのニーズに合わせてabritraryタイプを作成するのは間違っているようです。
- サービスレイヤーでA、B、Cエンティティの個々のリポジトリを個別に呼び出してから、返された各オブジェクトからのデータを処理します。これは多くの余分な作業のようです。
- 返すViewModelを作成します。これは私にも場違いのようです。私はサービスレイヤーとUIレイヤーの間でViewModelクラスを多用していますが、リポジトリからの戻りにそれらが活用されているのを見たことがありません。
タイプに追加して呼び出し元に返す必要のあるデータの集合体を取得するために、複数のエンティティ間でクエリを実行するのは私だけではありません。私の問題を解決するためにこれを行うための一般的な方法または標準的な方法は何ですか?
ありがとう!