我们为什么需要DTO(数据传输对象)
2016-03-23 10:55
197 查看
DTO即数据传输对象。之前不明白有些框架中为什么要专门定义DTO来绑定表现层中的数据,为什么不能直接用实体模型呢,有了DTO同时还要维护DTO与Model之间的映射关系,多麻烦。
然后看了这篇文章中的讨论部分才恍然大悟。
摘两个比较有意义的段落。
表现层与应用层之间是通过数据传输对象(DTO)进行交互的,数据传输对象是没有行为的POCO对象,它 的目的只是为了对领域对象进行数据封装,实现层与层之间的数据传递。为何不能直接将领域对象用于 数据传递?因为领域对象更注重领域,而DTO更注重数据。不仅如此,由于“富领域模型”的特点,这样 做会直接将领域对象的行为暴露给表现层。
需 要了解的是,数据传输对象DTO本身并不是业务对象。数据传输对象是根据UI的需求进行设计的,而不 是根据领域对象进行设计的。比如,Customer 领域对象可能会包含一些诸如FirstName, LastName, Email, Address等信息。但如果UI上不打算显示Address的信息,那么CustomerDTO中也无需包含这个 Address的数据
简单来说Model面向业务,我们是通过业务来定义Model的。而DTO是面向界面UI,是通过UI的需求来定义的。通过DTO我们实现了表现层 与Model之间的解耦,表现层不引用Model,如果开发过程中我们的模型改变了,而界面没变,我们就只需要改Model而不需要去改表现层中的东西。
如果我的文章对你有帮助,就点一下推荐吧.(*^__^*)
然后看了这篇文章中的讨论部分才恍然大悟。
摘两个比较有意义的段落。
表现层与应用层之间是通过数据传输对象(DTO)进行交互的,数据传输对象是没有行为的POCO对象,它 的目的只是为了对领域对象进行数据封装,实现层与层之间的数据传递。为何不能直接将领域对象用于 数据传递?因为领域对象更注重领域,而DTO更注重数据。不仅如此,由于“富领域模型”的特点,这样 做会直接将领域对象的行为暴露给表现层。
需 要了解的是,数据传输对象DTO本身并不是业务对象。数据传输对象是根据UI的需求进行设计的,而不 是根据领域对象进行设计的。比如,Customer 领域对象可能会包含一些诸如FirstName, LastName, Email, Address等信息。但如果UI上不打算显示Address的信息,那么CustomerDTO中也无需包含这个 Address的数据
简单来说Model面向业务,我们是通过业务来定义Model的。而DTO是面向界面UI,是通过UI的需求来定义的。通过DTO我们实现了表现层 与Model之间的解耦,表现层不引用Model,如果开发过程中我们的模型改变了,而界面没变,我们就只需要改Model而不需要去改表现层中的东西。
如果我的文章对你有帮助,就点一下推荐吧.(*^__^*)
相关文章推荐
- ThinkPHP路由机制简介
- hdoj A + B Again 2057 (16进制加法)
- 使用Ping++为你的Wordpress博客一键集成支付功能的插件使用图文教程
- Android开发之Socket编程以及注意事项
- QT下的几种透明效果
- 在Ubuntu 12.04.4下 更新TL-WN821N无线网卡驱动
- Spring+SprinMVC配置学习总结
- js闭包
- 【R笔记】R语言利器之ddply
- linux系统垃圾清理
- bzoj 2229 [Zjoi2011]最小割(分治+最小割)
- 四元数和旋转矩阵
- makefile.in
- json日期格式转换
- log4j 如何配置不同的classeslog写入不同的文件中
- Tableview最后一行无法显示或者显示不全的问题
- 简明Python教程学习笔记_7_输入输出和文件操作
- [Mysql] find_in_set()使用注意
- [2016/03/23] 2016年蓝桥杯JAVA A组 参赛总结和感想
- 设计删除顺序表中【x,y】中的所有元素算法