Asp.net mvc 将数据契约重用为视图模型

Asp.net mvc 将数据契约重用为视图模型,asp.net-mvc,wcf,Asp.net Mvc,Wcf,假设您的解决方案包含以下项目: 核心(实体) 合同(DTO、服务接口) 服务(服务实现) 服务主机(WCF) 客户端(ASP.NET MVC) 客户使用的是合同,而不是实体。MVC项目中的每个视图都有自己独特的视图模型。MVC项目不了解实体 我正在考虑将数据契约重用为视图模型的可能性,因此,我不会从服务中检索小部件DTO并将小部件DTO映射到小部件VM,而是检索小部件DTO并将其直接传递给视图 这是好是坏,为什么 这是好是坏,为什么 如果这些DTO严格符合视图的要求(这会让我非常惊讶),那么

假设您的解决方案包含以下项目:

  • 核心(实体)
  • 合同(DTO、服务接口)
  • 服务(服务实现)
  • 服务主机(WCF)
  • 客户端(ASP.NET MVC)
客户使用的是合同,而不是实体。MVC项目中的每个视图都有自己独特的视图模型。MVC项目不了解实体

我正在考虑将数据契约重用为视图模型的可能性,因此,我不会从服务中检索小部件DTO并将小部件DTO映射到小部件VM,而是检索小部件DTO并将其直接传递给视图

这是好是坏,为什么

这是好是坏,为什么

如果这些DTO严格符合视图的要求(这会让我非常惊讶),那么,是的,使用它们而不是编写视图模型是完全可以的


但如果您发现自己在使用ViewBag,因为DTO中不存在视图所需的某些属性,请立即停止!转到并定义此特定视图的视图模型。

如果您从未计划在其他客户端(例如WPF客户端或其他MVC应用程序)中使用DTO,则如果DTO为MVC应用程序手工制作,则可以将DTO用作虚拟机。在任何其他情况下,我都会进行DTO->VM映射。顺便说一句,我希望您对这种复杂的体系结构有一个很好的理由:MVC通过WCF与DB对话。。。