视图模型和数据传输对象有什么区别?
我在福勒PoEAA基础上的这个问题。 鉴于您对本文的熟悉,是不是在ASP.NET MVC中使用的ViewModel与DTO相同? 为什么或者为什么不? 谢谢。
他们服务于类似的目的(为另一层应用程序封装数据),但是他们做了不同的处理,原因不同。
-
DTO的目的是减less应用层之间的呼叫次数,特别是当这些呼叫昂贵时(例如分布式系统)。 DTO几乎总是可串行化的,几乎从不包含任何行为。
例如,您正在开发电子商务网站。
CreateCustomer
和AddCustomerAddress
是数据库级别的独立操作,但是出于性能原因,您可能想要将它们的数据聚合到NewCustomerWithAddressDto
以便客户端只需进行一次往返服务器的操作,而无需关心服务器可能会对数据包做很多不同的事情。 -
术语“ViewModel”在不同风格的MV *中意味着稍微不同的东西,但其目的主要是分离关注点。 您的模型经常针对演示以外的其他目的进行优化,ViewModel负责将视图与模型的实现细节分离。 此外,大多数MV *模式build议尽可能使您的视图为“哑”,因此ViewModel有时会承担演示逻辑的责任。
例如,在同一个电子商务应用程序中,您的
CustomerModel
在您的“新客户”视图中显示的形状是错误的。 对于初学者,您的视图有两个表单字段供您的用户input并确认他们的密码,而您的CustomerModel
根本不包含密码字段! 你的NewCustomerViewModel
将包含这些字段,可能会根据你的MV *风格,负责一些表示逻辑(例如显示/隐藏部分视图)和基本validation(例如确保两个密码字段匹配)。
目的不同:
- DTO用于传输数据
- ViewModels用于向最终用户显示数据。
所以通常情况下,ViewModel包含了演示数据,巫婆在很多情况下类似于DTO中的内容,但有一些差异。 想想枚举,本地化,货币,date格式,…的表示。 这是因为在你看来,通常应该没有逻辑。
MVVM和MVP中的DTO通常是非常笨的对象 ,基本上只是一堆属性设置器和获取器。 ViewModels另一方面可以有一些行为。
具有DTO的实际积极的副作用是允许更容易的序列化。 如果你有一个相当复杂的对象,例如C#,你会经常发现自己不得不select性地closures你不想序列化的东西。 这可以变得相当丑陋,DTO简化了这个过程。
视图模型和数据传输对象有相似之处和不同之处。
类似:将数据传输到接收器(视图或服务)中的logging(对象实例,可能是序列化的)
差异:视图模型旨在发送到一个视图,其中将显示,格式。 视图模型也将数据发送回控制器。 DTO通常不是为了演示。 它旨在发送原始数据。
- 将类名分配给元素时,请将方括号转义
- 检索项目的父项时出错:找不到与给定名称相匹配的资源'android:TextAppearance.Material.Widget.Button.Borderless.Colored'
- 如何使用jquery或ajax更新c#/ asp.net中的剃刀局部视图的MVC项目
- 使用Windowsvalidation的连接string
- 在VS dev服务器和IIS上为ASP.NET MVC应用程序设置文化
- 如何在ASP.NET MVC 3razorViewStart文件中指定不同的布局?
- 正确使用.net MVC Html.CheckBoxFor
- ASP.NET MVC2 / 3中“runAllManagedModulesForAllRequests”的正确用法是什么?
- 调用MVC控制器和Action方法的HTMLbutton
- 微软图表,MVC 3和剃刀
- Orderby()不正确sorting数字c#