aut*_*att 98 asp.net-mvc domain-driven-design dto viewmodel
我正在使用NHibernate来保存我的域对象.为了简单起见,我将ASP.NET MVC项目用作表示层和服务层.
我想从我的控制器类返回XML中的域对象.在Stack Overflow上阅读了一些帖子后,我收集DTO是可行的方法.但是,我也遇到过有关ViewModel的帖子.
我的问题:数据传输对象和ViewModels是一样的吗?或者ViewModel是DTO的一种子模式?
Ray*_*Ray 65
ASP.NET MVC实践中的ViewModel与DTO相同,但MVVM模式中的ViewModel与DTO不同,因为MVVM中的ViewModel具有行为但DTO没有.
Dav*_*vid 20
DTO - 数据传输对象与其说的完全一样,是用于传输数据的容器.他们没有任何行为,只有一堆安装者和吸气剂.有些人使它们变得不可变,只需在需要时创建新的而不是更新现有的.它们应该是可序列化的,以允许通过电线传输.
通常,DTO用于跨越进程边界将数据从一个层传送到另一个层,因为对远程服务的调用可能很昂贵,因此所有需要的数据都被推送到DTO并以一个块(粗粒度)传输到客户端.
然而,有些人使用屏幕绑定DTO的概念(与交叉过程边界无关).同样,这些数据填充了所需的数据(通常是特定屏幕所需的数据,可能是来自各种来源的数据汇总)并发送给客户端.
http://blog.jpboodhoo.com/CommentView,guid,21fe23e7-e42c-48d8-8871-86e65bcc9a50.aspx
在已经说明的简单情况下,这个DTO可以用于绑定到视图,但在更复杂的情况下,它需要创建一个ViewModel并将数据从DTO卸载到ViewModel,这显然是更多的工作(当应用MVVM模式时) .
所以再次如已经说明的DTO!= ViewModel
和
DTO和ViewModel在生活中有不同的用途
ria*_*mri 12
首先,主要区别在于ViewModel可以拥有DTO必须不行的行为或方法!
其次,在ASP.NET MVC中使用DTO作为ViewModel使您的应用程序与DTO紧密耦合,这正是使用DTO的相反目的.如果你这样做,使用域模型或DTO的差异是什么,获得反模式会更复杂?
ASP.NET中的ViewModel也可以使用DataAnnotations进行验证.
相同的DTO可以具有不同的ViewModel Mapping,并且One ViewModel可以由不同的DTO组成(始终使用对象映射而不是合成).因为我认为如果你有一个包含DTO的ViewModel会更糟,我们会遇到同样的问题.
从您的表示层,将DTO视为合同,您将收到一个您必须认为对您的应用程序更陌生并且对其没有任何控制的对象(即使您有ex服务,dto和表示层是你的).
最后,如果您进行这种清洁分离,开发人员可以轻松地协同工作.设计ViewModels,Views和Controllers的人不必担心服务层或DTO实现,因为他将在其他开发人员完成实现时进行映射......他甚至可以使用Mocking工具或手动模拟来填充包含测试数据的表示层.
对于一些简单的视图,我将使用我的DTO作为我的模型,但随着视图变得更加复杂,我将创建ViewModels.
对我来说,它是速度之间的平衡(使用DTO,因为我已经拥有它们)和灵活性(创建ViewModels意味着更多的关注点分离).
归档时间: |
|
查看次数: |
36519 次 |
最近记录: |