如何同时使用 DTO 和 ViewModel?或者这是不可能的?
How to use DTO and ViewModel all together? Or it is not possible?
注意:我的问题是关于在 .NET/C# 项目中使用 DTO、ViewModel。
我知道 DTO、ViewModel、模型。他们有特定的目的。我们使用 DTO 传输数据,使用 ViewModel 向最终用户显示数据。但是我对将它们全部一起使用感到困惑。我做了很多谷歌搜索,但没有找到如何同时使用它们的完整教程。
我不确定它们是否可以一起使用,或者它们必须用于特定目的,例如对于常规 MVC 我们可以使用 ViewModel,对于 WebAPI 我们将使用 DTO。
任何人都可以解释一下它们的使用方法,或者任何 link 都将集中使用它们的方法。
如果您编写简单的 CRUD 应用程序,那么最好将 ORM (EF) 和视图的模型分开,因为在此之后您的 ViewModel 不依赖于实体模型,并且您可以轻松更改数据库表而不必担心表示模型。
如果您编写的大型企业应用程序具有丰富的域模型,那么请查看 CQRS 模式。 (见乌迪大汉post)
在此之后,如果您选择使用此架构模式,那么为 View 使用一个模型,为 ORM 使用另一个模型是有意义的。 (参见 Materialized View pattern)
I did a lot of Googling but did not find a complete tutorial how to
use both of them all together.
View <----------- -> Controller <-----------> Service/Repository
ViewModel DTO
^--------AutoMapper-------^
ViewModel主要用于从Controller向View传递数据.
数据传输对象(DTO)是一个松散的术语;您也可以将 POCO 实体称为 DTO。它主要用于将数据从service/repository层传递到控制器,反之亦然。
从DTO到ViewModel的数据传输工作量很大,所以我们一般使用AutoMapper从DTO到ViewModel反之亦然。
您绝对可以为 MVC 和 WebAPI 共享 ViewModel。
Can anybody explain the way to use them or any link is appreciated
which focuses the use of both of them all together.
在我的示例项目中,我有 EmailTemplateModel(View Model) and EmailTemplate。
EmailTemplate class 用于将数据从 EmailTemplateService to EmailTemplateController. I then use AutoMapper 传输到映射对象。
在DTO中我们不能定义属性,但是在view-model中我们定义属性表示getter
和setter
。如果我们将数据从控制器传递到视图,反之亦然,那么使用视图模型。如果我们使用 repo 模式并将数据从服务传递到控制器,则使用 DTO。
注意:我的问题是关于在 .NET/C# 项目中使用 DTO、ViewModel。
我知道 DTO、ViewModel、模型。他们有特定的目的。我们使用 DTO 传输数据,使用 ViewModel 向最终用户显示数据。但是我对将它们全部一起使用感到困惑。我做了很多谷歌搜索,但没有找到如何同时使用它们的完整教程。
我不确定它们是否可以一起使用,或者它们必须用于特定目的,例如对于常规 MVC 我们可以使用 ViewModel,对于 WebAPI 我们将使用 DTO。
任何人都可以解释一下它们的使用方法,或者任何 link 都将集中使用它们的方法。
如果您编写简单的 CRUD 应用程序,那么最好将 ORM (EF) 和视图的模型分开,因为在此之后您的 ViewModel 不依赖于实体模型,并且您可以轻松更改数据库表而不必担心表示模型。
如果您编写的大型企业应用程序具有丰富的域模型,那么请查看 CQRS 模式。 (见乌迪大汉post)
在此之后,如果您选择使用此架构模式,那么为 View 使用一个模型,为 ORM 使用另一个模型是有意义的。 (参见 Materialized View pattern)
I did a lot of Googling but did not find a complete tutorial how to use both of them all together.
View <----------- -> Controller <-----------> Service/Repository
ViewModel DTO
^--------AutoMapper-------^
ViewModel主要用于从Controller向View传递数据.
数据传输对象(DTO)是一个松散的术语;您也可以将 POCO 实体称为 DTO。它主要用于将数据从service/repository层传递到控制器,反之亦然。
从DTO到ViewModel的数据传输工作量很大,所以我们一般使用AutoMapper从DTO到ViewModel反之亦然。
您绝对可以为 MVC 和 WebAPI 共享 ViewModel。
Can anybody explain the way to use them or any link is appreciated which focuses the use of both of them all together.
在我的示例项目中,我有 EmailTemplateModel(View Model) and EmailTemplate。
EmailTemplate class 用于将数据从 EmailTemplateService to EmailTemplateController. I then use AutoMapper 传输到映射对象。
在DTO中我们不能定义属性,但是在view-model中我们定义属性表示getter
和setter
。如果我们将数据从控制器传递到视图,反之亦然,那么使用视图模型。如果我们使用 repo 模式并将数据从服务传递到控制器,则使用 DTO。