我基于福勒PoEAA这个问题。鉴于您对本文的熟悉,是不是在ASP.NET MVC中使用的ViewModel与DTO相同?为什么或者为什么不?谢谢。视图模型和数据传输对象之间有什么区别?
回答
他们服务于类似的目的(为应用程序的另一层封装数据),但他们以不同的方式做了不同的原因。
一个DTO的目的是减少的应用层之间的呼叫的数量,尤其是当这些呼叫是昂贵的(例如,分布式系统)。 DTO几乎总是可以序列化的,几乎从不包含任何行为。
例如,您正在开发电子商务网站。
CreateCustomer
和AddCustomerAddress
是数据库级别的独立操作,但是出于性能原因,您可能想要将其数据汇总到NewCustomerWithAddressDto
,以便您的客户端只需进行一次往返服务器的操作,而无需关心服务器可能会对数据包做很多不同的事情。术语“ViewModel”在不同风格的MV *中意味着稍微不同的事物,但其目的主要是分离关注点。您的模型经常针对演示以外的其他目的进行优化,ViewModel负责将视图与模型的实现细节分离。此外,大多数MV *模式建议尽可能使视图为“哑”,因此ViewModel有时会对呈现逻辑负责。
例如,在同一个电子商务应用程序中,您的
CustomerModel
在您的“新客户”视图中显示时是错误的“形状”。对于初学者,您的视图有两个表单字段供您的用户输入并确认其密码,并且您的CustomerModel
根本不包含密码字段!您的NewCustomerViewModel
将包含这些字段,并可能根据您的MV *风格,负责某些表示逻辑(例如显示/隐藏部分视图)和基本验证(例如确保两个密码字段匹配)。
的目的是不同的:
- DTO的用于传输数据
- 的ViewModels用于数据显示给最终用户。
因此通常ViewModel包含演示数据,巫婆在很多情况下类似于DTO中的内容,但有一些差异。想想枚举,本地化,货币,日期格式的表示形式......。这是因为在你看来,通常应该没有逻辑。
的DTO在MVVM和MVP通常是非常愚蠢的对象和基本上只是一堆属性getter和setter方法的。 ViewModels另一方面可能会有一些行为。
具有DTOs的实际积极影响允许更容易的序列化。如果你有一个相当复杂的对象,比如C#,你会经常发现自己不得不有选择性地关闭你不想序列化的东西。这可能会变得相当难看,DTO简化了这个过程。
+1,关键的区别在于DTOs是愚蠢的(因此可以简单地序列化,这是他们的* job *),而ViewModels可以包含否则会进入你的视图(这是*他们*作业)的逻辑。 – 2009-09-17 08:22:41
@Igor Zevaka你能解释一下你的行为是什么意思吗? – 2016-03-11 07:53:29
视图模型和数据传输对象有相似之处和不同之处。
类似的:在一个记录 传输数据(对象实例,或许串行化)到接收器,是否一个视图或服务
差异: 视图模型旨在被发送到一个浏览,在那里它将显示格式。 视图模型也将数据发送回控制器。 DTO通常不适用于演示文稿。它旨在发送原始数据。
- 1. 数据模型和对象模型有什么区别?
- 2. 对象,*和没有类型之间的区别是什么?
- 3. _EPROCESS对象和_KPROCESS对象之间有什么区别
- 4. 在Java中的DTO(数据传输对象)和类对象之间的区别?
- 5. 在Backbone.js中,通过在选项中传递模型来初始化视图和将模型对象作为参数传递之间有什么区别?
- 6. 对象和字符串对象之间的区别是什么
- 7. cakephp - 模型和行为之间有什么区别?
- 8. 数据沿袭和数据来源之间有什么区别?
- 9. C#中的对象和类之间有什么区别?
- 10. Perl中的对象和类之间有什么区别?
- 11. Ref对象的getPeeledObjectId()和getObjectId()之间有什么区别?
- 12. ResultSet和对象之间有什么区别?
- 13. 实例和对象之间有什么区别?
- 14. JSON和JavaScript对象之间有什么区别?
- 15. 方法迭代器和视图之间有什么区别?
- 16. 存储过程和视图之间有什么区别?
- 17. 数据传输对象(DTO)与愚蠢的业务对象之间的区别?
- 18. 消息传递和共享内存并发模型之间有什么区别?
- 19. 数据设计和数据模型(ERD)有什么区别
- 20. MVC模型,数据和数据库有什么区别?
- 21. cl_datatype和通常数据类型之间的区别是什么
- 22. 回发数据和视图状态数据有什么区别
- 23. dpm()和dsm()之间有什么区别?
- 24. @dynamic和@synthesize之间有什么区别?
- 25. vbNullString和“”之间有什么区别吗?
- 26. * zoom和zoom之间有什么区别?
- 27. String.Concat,string.format和+之间有什么区别?
- 28. StaticLayout和DynamicLayout之间有什么区别
- 29. WebServiceBinding.EmitConformanceClaims和WebServiceBinding.ConformanceClaims之间有什么区别?
- 30. :: after和after之间有什么区别?
这是一个很好的解释!到目前为止,我所见过的唯一视图模型只有getter和setter,所以我就是这样:哇,这很像DTO。感谢您为我清理这个。 – mkelley33 2009-09-16 11:48:55