代码之家  ›  专栏  ›  技术社区  ›  Adam Pope

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

  •  1
  • Adam Pope  · 技术社区  · 15 年前

    假设我有一个班的学生和一个学生有一个家庭教师。在“编辑学生”页面上,我想显示一个可供选择的导师列表。

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

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

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

    控制器应该负责加载所有数据,还是让视图模型类加载它?我不能决定这是谁的问题。

    不管怎样,在一个有多个二级数据集的更复杂的场景中,其中一个类最终将被注入大量或存储库的contstructor。

    2 回复  |  直到 15 年前
        1
  •  2
  •   lomaxx    15 年前

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

    有趣的问题是,正如您所说,避免将几个ireposition实例注入构造函数,这是整个存储库模式的问题,有些人甚至建议使用存储库 pattern is dead .

    我不知道是不是这样,但我建议您仔细考虑如何构造数据访问对象,以避免盲目地向周围注入存储库,因为这可能非常有害。

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

        2
  •  2
  •   Jedidja    15 年前

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

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

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