首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >视图模型和数据传输对象之间的区别是什么?

视图模型和数据传输对象之间的区别是什么?
EN

Stack Overflow用户
提问于 2009-09-16 07:13:58
回答 5查看 17.8K关注 0票数 57

我把这个问题建立在福勒PoEAA的基础上。鉴于您对本文的熟悉程度,ASP.NET MVC中使用的ViewModels不是与DTO相同吗?为什么或者为什么不?谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-09-16 07:28:33

它们服务于类似的目的(为应用程序的另一层封装数据),但它们的做法不同,原因也不同。

  • DTO的目的是减少应用程序各层之间的调用次数,特别是当这些调用代价很高时(例如分布式系统)。DTO几乎总是微不足道的可序列化的,并且几乎不包含任何行为。

例如,您正在开发一个电子商务网站。CreateCustomerAddCustomerAddress在数据库级别上是独立的操作,但出于性能原因,您可能希望将它们的数据聚合到一个NewCustomerWithAddressDto中,以便您的客户端只需要对服务器进行一次往返,而不需要关心服务器可能会对数据包执行一系列不同的操作。

  • 术语"ViewModel“在不同风格的MV*中的含义略有不同,但其目的主要是分离关注点。您的模型经常被优化以用于表示之外的某些目的,ViewModel的责任是将您的视图与模型的实现细节解耦。此外,大多数MV*模式建议让视图尽可能地“愚蠢”,因此ViewModel有时会负责表示逻辑。

例如,在同一个电子商务应用程序中,您的CustomerModel在"New Customer“视图上显示的”形状“是错误的。对于初学者来说,您的视图有两个表单字段供用户输入和确认其密码,而您的CustomerModel根本不包含密码字段!您的NewCustomerViewModel将包含这些字段,并且可能负责某些呈现逻辑(例如,显示/隐藏视图的某些部分)和基本验证(例如,确保两个密码字段匹配),这取决于您使用MV*的风格。

票数 97
EN

Stack Overflow用户

发布于 2009-09-16 07:18:21

目的是不同的:

data

  • ViewModels
  • DTO用于传输DTO用于向最终用户显示数据。

因此,通常ViewModels包含演示文稿数据,在很多情况下类似于DTO中的内容,但有一些区别。考虑一下枚举的表示、本地化、货币、日期格式等。这是因为通常情况下,视图中不应该有逻辑。

票数 19
EN

Stack Overflow用户

发布于 2009-09-16 07:52:19

MVVM和MVP中的通常是非常愚蠢的对象DTO,DTO基本上只是一堆属性setter和getter。另一方面,ViewModels可以有一些行为。

拥有DTO的一个实际的积极副作用是允许更容易的序列化。如果你有一个相当复杂的对象,比如C#,你经常会发现自己不得不有选择地关闭那些你不想序列化的东西。这可能会变得相当丑陋,而DTO简化了这个过程。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1431445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档