视图模型应该是具有自己的存储库的聚合吗?

时间:2009-03-30 02:54:22

标签: asp.net-mvc repository aggregate

传递给视图的Model是否应该通过单个存储库的单个调用来完全定义。换句话说,模型是单个聚合,还是应该在服务层中从单独的聚合构建我的模型,每个聚合都有自己的存储库?

我现在的方式是,我只需调用一个存储库来填充整个模型,然后由View显示。似乎聚合,存储库和模型都变成了相同的概念。

1 个答案:

答案 0 :(得分:2)

我的意思是“以上都没有”。我更喜欢使用视图的表示模型,而表示模型不需要存储库。造成这种情况的原因有很多:

  • 使用演示模型可以在设计模型和数据库之前设计视图和控制器。因此,您可以尽早获得用户输入。
  • 演示模型允许您将相当“平坦”的模型传递给视图,因此您无需担心延迟加载等ORM问题。
  • 演示模型通常可以简化模型绑定。
  • 使用演示模型时,您无需担心意外返回字段,不应允许某个用户查看,或者意外更新不允许用户更新的字段,因为您没有获得白名单正确的。

现在,更具体地说,按照您的问题行:您是否构建了演示模型的实例?需要多少个存储库?那么,这个问题现在几乎可以解决了。您可以设计演示模型以遵循视图的要求。您可以按照良好的TDD实践设计存储库,包括识别聚合根。现在,“我需要多少个存储库来实例化这个模型”的问题很简单。您检查模型所需的聚合根,并使用您需要的根。通常,我可以在单个LINQ查询中执行此操作。