我使用NHibernate持久化我的域对象。为了简单起见,我使用一个ASP.NET MVC项目作为我的表示层和服务层。
我想从我的控制器类返回XML格式的域对象。在阅读了Stack Overflow上的一些帖子后,我认为DTO是一种可行的方式。然而,我也遇到了一些关于ViewModel的帖子。
我的问题是:数据传输对象和ViewModels是一回事吗?或者ViewModel是DTO的一种子模式?
发布于 2009-12-31 03:58:13
DTO的规范定义是没有任何行为的对象的数据形状。
ViewModels是视图的模型。ViewModels通常是来自一个或多个对象(或DTO)的完整或部分数据,外加特定于视图行为的任何附加成员(可由视图执行的方法、指示如何切换视图元素的属性等)。您可以将视图模型视为视图的所有数据加上行为。ViewModels可能会也可能不会一对一地映射到业务对象或DTO。
顺便说一句,如果某个视图模型需要来自持久化对象的数据子集,那么NHibernate projections就派上用场了。
发布于 2011-07-25 09:21:51
MVVM实践中的ViewModel与DTO是相同的,但ASP.NET模式中的ViewModel与DTO不同,这是因为MVVM中的ViewModel具有行为而DTO不具有行为。
发布于 2009-12-31 03:59:00
DTO != ViewModel
在MVVM模式中,ViewModel用于将模型与视图隔离。为了表示模型,您可以使用简单的DTO类,它同样通过NHibernate映射到数据库。但是我从来没有见过一个ViewModel类被建模为DTO。ViewModel类大多有DTO没有的行为。
https://stackoverflow.com/questions/1982042
复制相似问题