2010-11-26 4 views
1

私はクラスの生徒がいて、生徒には家庭教師がいます。私の編集学生ページには、選ぶ先生のリストが表示されます。MVCにセカンダリデータセットをロードするのに最適なのはどこですか?

これを行うには、現在の学生とチューターリポジトリを取得してすべてのチューターのリストを取得するには、ある時点でStudentリポジトリにアクセスする必要があります。私はリポジトリインスタンスを取得するためにDependency Injectionを使用しています。

私は、レンダリングのためにビューに渡す前にコントローラがポピュレートするビューモデルクラスを持っています。私はそのクラスにIEnumerable<Tutor>を与えました。これをドロップダウンをレンダリングするビューで使用できます。

私の質問:誰がチューターのリストを作成する必要がありますか?

コントローラがすべてのデータをロードする必要がありますか、またはビューモデルクラスをロードする必要がありますか?私は誰がこのことを心配しているのかを判断できません。

どちらの方法でも、複数のセカンダリデータセットが存在するより複雑なシナリオでは、クラスの1つは、コンストラクタにロットまたはリポジトリが注入されることになります。

答えて

2

それは間違いなく続きの役割だろうどこか別の場所(リポジトリ)からデータを取得し、ビューにのviewmodelを渡すのviewmodel

  • としてそれを一緒にパッケージ化あなたのビューモデルがいつもその特定のチューターのリストを読み込むことに縛られたくないからです。

    興味深い問題は、いくつかのIRepositoryインスタンスをコンストラクタに注入することを避けていることです。リポジトリパターン全体に問題があり、一部の人はリポジトリpattern is deadを提案するまで行っています。

    私にはわかりませんが、データアクセスオブジェクトをどのように構造化するかを注意深く考えて、盲目的にリポジトリを注入している状況を避けることができます。非常に有害です。

    私は、IRepository<>のインスタンスを、アプリケーションがデータにアクセスする方法にはるかに近い表現を持つ別のリポジトリを構築するための基礎として使用する傾向があります。

  • +0

    投稿した興味深い記事です。ありがとう。 –

    2

    通常、コントローラはビ​​ューに送信する前にビューモデルの別々の部分を設定することを心配します。複数の場所で同じビューモデルを使用する場合がありますが、必ずしもすべてのフィールドに値を設定する必要はありません(この場合はIEnumerable<Tutor>

    コントローラの責任は次のように見なすことができます。 :

    関連する問題