注意:我的问题是在.NET / C#项目中使用DTO,ViewModel。
我知道DTO,ViewModel,Models。他们有特定的目的。我们使用DTO传输数据,使用ViewModel向最终用户显示数据。但我很困惑要将它们全部用在一起。我做了很多谷歌搜索,但没有找到一个完整的教程如何一起使用它们。
我不确定它们是否可以一起使用,或者它们必须用于特定目的,例如常规MVC,我们可以使用ViewModel,而对于WebAPI,我们将使用DTO。
任何人都可以解释使用它们的方式,或者赞赏任何链接都将它们全部集中在一起使用。
答案 0 :(得分:3)
我做了很多谷歌搜索,但没有找到完整的教程如何 一起使用它们。
View <----------- -> Controller <-----------> Service/Repository
ViewModel DTO
^--------AutoMapper-------^
ViewModel 主要用于将数据 从Controller传递到View 。
数据传输对象(DTO) 是一个松散的术语;您也可以将POCO实体称为DTO。它主要用于将数据 从服务/存储库层传递到控制器 ,反之亦然。
将数据从DTO传输到ViewModel需要做很多工作,因此我们通常会将DTO中的 AutoMapper 用于ViewModel,反之亦然。
你绝对可以为MVC和WebAPI共享ViewModel。
任何人都可以解释使用它们的方式或任何链接表示赞赏 它将两者的使用集中在一起。
在我的示例项目中,我有EmailTemplateModel (查看模型)和EmailTemplate。
EmailTemplate类用于将数据从EmailTemplateService传输到EmailTemplateController。然后我使用AutoMapper来映射对象。
答案 1 :(得分:1)
如果您编写简单的CRUD应用程序,那么最好将ORM(EF)和View的模型分开,因为在此之后您的ViewModel不依赖于实体模型,您可以轻松更改数据库表而无需担心表示模型。
如果您编写了大型企业应用程序,您拥有丰富的域模型,那么请查看CQRS模式。 (见Udi Dahan post)
在此之后,如果您选择使用此体系结构模式,那么有一个模型用于View,另一个模型用于ORM。 (见Materialized View pattern)
答案 2 :(得分:0)
在DTO中,我们无法定义属性,但是在视图模型中,我们定义属性的意思是getter
和setter
。如果我们将数据从控制器传递到视图,反之亦然,则使用视图模型。如果我们使用回购模式并将数据从服务传递到控制器,则使用DTO。