【问题标题】:Should a Model for a View be an Aggregate with its own Repository?视图模型应该是具有自己存储库的聚合吗?
【发布时间】:2009-03-30 02:54:21
【问题描述】:

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

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

【问题讨论】:

    标签: asp.net-mvc repository aggregate


    【解决方案1】:

    我的意思是“以上都不是”。我更喜欢对视图使用表示模型,并且表示模型不需要存储库。这有多种原因:

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

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

    【讨论】:

    • 实际上我对每个视图都有一个演示模型。你不能说演示模型本身就是一个聚合体吗?正如你所说,在我的服务层中,我会将聚合“打包”到表示模型中。聚合可能有不同的存储库?
    • 根据定义,表示模型不能是 DDD 术语中的聚合路由,因为它不在存储库中。如果存储库中有东西,那么它不是表示模型,同样根据定义。演示模型是特定于视图的。
    猜你喜欢
    • 2011-09-23
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    相关资源
    最近更新 更多