2017-10-16 5 views
1

私はリポジトリパターンの実装方法をよく理解しているとは思いますが、複雑なクエリ/メソッドに関する決定ループに苦しんでいます。リポジトリパターン:複雑なメソッドはどこに行きますか?

ユーザーテーブルに特定のフィールド値を持つすべてのユーザーまたはユーザーを取得する場合は、ユーザーリポジトリに入ることは明らかです。しかし、ビデオコースがこのようなタイプのビデオコースを完了したすべてのユーザーなど、もっと複雑なクエリがあるとどうなりますか?私のモデルでは、このクエリは約6つのテーブルを横断します。

if(user.completedVideoRequirement)のようなことをするリポジトリを私たちにできるようにしたいのですが、私はユーザリポジトリがこれのための場所であると自信を持っています。それは私には正しいようですが、私はそれをかなり簡単に論じることができます。

正しい方法はありますか?

EDIT:データベースエンティティ以外の情報を返す場合(true/falseなどのintを返す場合)はどうなりますか?リポジトリレベルでもこれを行う必要がありますか?if(users.CompletedVideoRequirement.Any())のようにしてください。 これはユーザーリポジトリに残っているのは当然ですが、ユーザーに関する情報ですが、技術的にはビデオに関する情報でもあるためです。

+0

あなたはefを使用していますか?はいの場合は、システム内のすべてのテーブルを持つコンテキストが必要です。はいの場合、そのコンテキストを持つ1つのリポジトリから任意のテーブルにアクセスできます。何が問題なの? – cassandrad

答えて

1

私の考えプロセスは「私は何を返すのですか?ここでの答えは「ユーザー」なので、UserRepositoryは確かに正しいレポです。
データベースのクエリ最適化を利用するには、100種類の方法でユーザーをフィルタリングすることができます。これらはすべてUserRepoに格納されます。 (大丈夫百は過度かもしれません)

いつでもあなたはユーザーまたはユーザーの集団を見ることができません。あなたはUserRepositoryにアクセスすることができます。それは人生の目的ですが、ユーザーにフィルタをかける必要があります。

+0

私はあなたの答えを受け入れました。なぜなら、質問の元の表現に完全に答えるからです。また、私はそれが編集されたバージョンで動作すると思います。私は結果としてデータベースオブジェクトを返さないメソッド(つまり、t/f、int)を含めるように質問を編集しました。 – DiscipleMichael

関連する問題