我把这个问题基于Fowler PoEAA。由于你熟悉这个文本,ASP.NET MVC中使用的ViewModel不是DTO?为什么或者为什么不?谢谢。
解决方法
它们提供相似的目的(封装应用程序的另一层的数据),但是它们有不同的原因。
> DTO的目的是减少应用层之间的呼叫数,特别是当那些呼叫是昂贵的(例如分布式系统)时。 DTO几乎总是可序列化的,并且几乎不包含任何行为。
例如,您正在开发电子商务网站。 CreateCustomer和AddCustomerAddress在数据库级别是单独的操作,但是出于性能原因,您可能希望将其数据聚合到NewCustomerWithAddressDto中,以便您的客户端只需要进行一次往返服务器,并且不需要关心服务器可能正在做一堆不同的事情与数据包。
>术语“ViewModel”意味着不同口味的MV *稍有不同,但它的目的主要是分离关注点。您的模型经常针对演示之外的某些目的进行优化,ViewModel负责将您的View与Model的实现细节分离。此外,大多数MV *模式建议使视图尽可能“哑”,因此ViewModel有时负责表示逻辑。
例如,在同一个电子商务应用程序中,您的CustomerModel是在“新客户”视图上显示的错误“形状”。对于初学者,您的视图有两个表单字段供您的用户输入和确认其密码,而您的CustomerModel不包含密码字段!您的NewCustomerViewModel将包含这些字段,并且根据MV *的风格,可能负责一些表示逻辑(例如显示/隐藏视图的部分)和基本验证(例如,确保两个密码字段匹配)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。