Asp.net mvc 视图的模型是否应该是具有自己存储库的聚合?

Asp.net mvc 视图的模型是否应该是具有自己存储库的聚合?,asp.net-mvc,repository,aggregate,Asp.net Mvc,Repository,Aggregate,是否应该通过对单个存储库的一次调用来完全定义将传递给视图的模型。换句话说,模型是单个聚合,还是我的模型应该由单独的聚合构建,每个聚合在服务层中都有自己的存储库 我现在的方式是,我只需调用一个存储库来填充整个模型,然后由视图显示。似乎聚合、存储库和模型都在成为同一个概念 My表示“以上都没有”。我更喜欢将表示模型用于视图,表示模型不需要存储库。原因有很多: 使用表示模型可以在设计模型和数据库之前设计视图和控制器。因此,您可以尽早获得用户输入 表示模型允许您将一个相当“扁平”的模型传递给视图,因此

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

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

My表示“以上都没有”。我更喜欢将表示模型用于视图,表示模型不需要存储库。原因有很多:

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

现在,更具体地按照您的问题:您是否构建了表示模型的实例?需要多少存储库?这个问题现在几乎可以自己回答了。您可以根据视图的要求设计表示模型。您可以按照良好的TDD实践设计存储库,包括识别聚合根。现在,“实例化此模型需要多少存储库”的问题很简单。检查模型所需的聚合根,并使用所需的根。通常,我可以在一个LINQ查询中完成这项工作。

实际上,每个视图都有一个表示模型。你能说演示模型本身就是一个集合吗?因此,正如您所说,在我的服务层中,我会将聚合“打包”到表示模型中。聚合可能有不同的存储库?表示模型不能定义为DDD术语中的聚合路由,因为它不在存储库中。如果存储库中有某种东西,那么它也不是表示模型,这也是定义上的。表示模型是视图特定的。