【问题标题】:How to use DTO and ViewModel all together? Or it is not possible?如何同时使用 DTO 和 ViewModel?还是不可能?
【发布时间】:2017-06-28 19:27:18
【问题描述】:

注意:我的问题是在 .NET/C# 项目中使用 DTO、ViewModel。

我知道 DTO、ViewModel、Models。他们有特定的目的。我们使用 DTO 传输数据并使用 ViewModel 向最终用户显示数据。但是我对将它们全部一起使用感到困惑。我做了很多谷歌搜索,但没有找到完整的教程如何一起使用它们。

我不确定它们是否可以一起使用,或者它们必须用于特定目的,例如对于常规 MVC,我们可以使用 ViewModel,对于 WebAPI,我们将使用 DTO。

任何人都可以解释使用它们的方式或任何链接都可以将它们都集中在一起使用。

【问题讨论】:

    标签: .net asp.net-mvc asp.net-web-api viewmodel dto


    【解决方案1】:

    我做了很多谷歌搜索,但没有找到完整的教程如何 一起使用它们。

    View <----------- -> Controller <-----------> Service/Repository
            ViewModel                    DTO
                ^--------AutoMapper-------^     
    

    ViewModel主要用于将数据从Controller传递到View

    数据传输对象(DTO) 是一个松散的术语;您也可以将 POCO Entity 称为 DTO。它主要用于将数据从服务/存储库层传递到控制器,反之亦然。

    将数据从 DTO 传输到 ViewModel 需要大量工作,因此我们通常使用 AutoMapper 从 DTO 到 ViewModel,反之亦然。

    您绝对可以为 MVC 和 WebAPI 共享 ViewModel。

    任何人都可以解释使用它们的方式或任何链接表示赞赏 它将两者的使用集中在一起。

    在我的示例项目中,我有 EmailTemplateModel(查看模型)EmailTemplate

    EmailTemplate 类用于将数据从EmailTemplateService 传输到EmailTemplateController。然后我使用AutoMapper 来映射对象。

    【讨论】:

      【解决方案2】:

      如果您编写简单的 CRUD 应用程序,那么最好为 ORM (EF) 和 View 分开模型,因为在此之后您的 ViewModel 不再依赖于实体模型,您可以轻松更改数据库表而无需担心演示模型。

      如果您编写具有丰富领域模型的大型企业应用程序,请查看 CQRS 模式。 (见乌迪·达汉post

      在此之后,如果您选择使用这种架构模式,那么将一个模型用于 View 而另一个用于 ORM 是有意义的。 (见Materialized View pattern

      【讨论】:

        【解决方案3】:

        在 DTO 中我们不能定义属性,但在视图模型中我们定义属性意味着 gettersetter。如果我们将数据从控制器传递到视图,反之亦然,则使用视图模型。如果我们使用 repo 模式并将数据从服务传递到控制器,则使用 DTO。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-10
          相关资源
          最近更新 更多