在MVC中加载辅助数据集的最佳位置是什么?

时间:2010-11-26 13:18:10

标签: asp.net-mvc

说我有班级学生,学生有导师。在我的编辑学生页面上,我想显示一个可供选择的导师列表。

要做到这一点,我将在某个时候点击学生资料库以获取当前学生和导师资料库以获得所有导师的列表。我正在使用依赖注入来获取我的repo实例。

我有一个视图模型类,控制器在传递给视图进行渲染之前填充它。我给了那个类IEnumerable<Tutor>,我可以在视图中使用它来呈现下拉列表。

我的问题:谁应该填写导师名单?

控制器是否应负责加载所有数据,或者,我应该让视图模型类加载它吗?我无法确定这是谁的担忧。

无论哪种方式,在一个更复杂的情况下,有多个辅助数据集,其中一个类最终会被一个contstructor注入批量或存储库。

2 个答案:

答案 0 :(得分:2)

我通常让控制器担心在将视图模型发送到视图之前填充视图模型的各个部分。有时您可能会在多个位置使用相同的视图模型,并且不一定仍希望填充其所有字段(在本例中为IEnumerable<Tutor>

我认为这是有道理的 - 控制员的责任可以被视为:

  • 从其他地方获取数据(存储库)并将其打包为viewmodel
  • 将viewmodel传递给视图

答案 1 :(得分:2)

肯定是控制器的角色,因为你不希望你的viewmodel被绑定到总是加载那个特定的导师列表。

正如你所说,有趣的问题是避免将几个IRepository实例注入到构造函数中,并且整个存储库模式存在问题,并且有些人甚至建议存储库pattern is dead

我不知道是否是这种情况,但我建议您仔细考虑如何构建数据访问对象,以避免在盲目地注入存储库的情况下,因为这可能非常有害的。

我倾向于使用IRepository<>实例作为构建另一个存储库的基础,该存储库更接近于我的应用程序访问数据的方式。