我们为什么需要DTO(数据传输对象)
原文:http://www.cnblogs.com/Gyoung/archive/2013/03/23/2977233.html
DTO即数据传输对象(Data Transfer Object)。之前不明白有些框架中为什么要专门定义DTO来绑定表现层(页面)中的数据,为什么不能直接用领域模型(domain object)呢,有了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对象,这个变得不同了,实体的变更,我只需要变更实体与DTO的转换过程。
比如说,本来有Item与ItemDTO对象,下一个时候我发现Item对象中许多字段存在冗余,实体设计得不好,可能需要拆分!那么若无ItemDTO,上层逻辑直接依赖于Item实体的话,需要将依赖的地方都进行修改。
若有ItemDTO,上层 只依赖于 ItemDTO,而不依赖于Item实体,这样,我们只需要想办法修改 将ItemDTO与变更后的若干个实体进行正确转换。上层 不需要动任何代码 的说。
不过这样写,多了一个DTO与Pojo以及VO之间的转换,确实......代码要多很多,挺麻烦 的说。:
我们为什么需要DTO(数据传输对象)的更多相关文章
- VO(视图模型) 与 DTO(数据传输对象)的区别
目录 VO(视图模型) 与 DTO(数据传输对象)的区别 1.VO与DTO概念 2.VO 视图模型的必要性与解耦 2.1 视图模型 2.2 视图模型存在的必要性 2.3 视图模型的解耦 3.DTO 存 ...
- 为什么需要DTO(数据传输对象)
DTO即数据传输对象.之前不明白有些框架中为什么要专门定义DTO来绑定表现层中的数据,为什么不能直接用实体模型呢,有了DTO同时还要维护DTO与Model之间的映射关系,多麻烦. 然后看了这篇文章中的 ...
- (扫盲)DTO数据传输对象
DTO即数据传输对象.但从定义上看就是简单的用来传递数据的.主要用途是在框架中定义DTO来绑定表现层中的数据.学过MVC.EF实体模型的都应该知道,我们可以定义一个Model实体来实现前后台数据的交互 ...
- 2、DTO(数据传输对象)
DTO:Data Transfer Object 即数据传输对象. 有些人会问这个DTO是干嘛的,不是已经有了Model实体类了么? 首先说一下,DTO是干嘛了.DTO的引入,应该说是伴随着分层架构设 ...
- DTO数据传输对象详解
文章目录 一.DTO是什么? 二.DTO解决的问题 三.代码演示 一.DTO是什么? DTO (数据传输对象) 数据传输对象(DTO),是一种设计模式之间传输数据的软件应用系统.数据传输目标往往是数据 ...
- DTO数据传输对象
如果有多个对象需要传输到页面上需要用DTO传输
- 贫血模型;DTO:数据传输对象(Data Transfer Object);AutoMapper ;Domain Model(领域模型);DDD(领域驱动设计)
====================== 我自己的理解 ========================== 一: DTO 我自己的理解,就是 比如你有一个类,跟数据库的table表结构一模一 ...
- 应用程序框架实战三十四:数据传输对象(DTO)介绍及各类型实体比较
本文将介绍DDD分层架构中广泛使用的数据传输对象Dto,并且与领域实体Entity,查询实体QueryObject,视图实体ViewModel等几种实体进行比较. 领域实体为何不能一统江湖? 当你阅读 ...
- 数据传输对象(DTO)介绍及各类型实体比较
数据传输对象(DTO)介绍及各类型实体比较 本文将介绍DDD分层架构中广泛使用的数据传输对象Dto,并且与领域实体Entity,查询实体QueryObject,视图实体ViewModel等几种实体进行 ...
随机推荐
- SQL Server 2008 的安装
SQL Server 2008简体中文企业版下载(SQL2008) SQL Server 2008分为SQL Server 2008企业版.标准版.工作组版.Web版.开发者版.Express版.Co ...
- Implementation Documentation[转]
原文地址:http://prasanna-adf.blogspot.tw/2009/04/implementation-documentation.html Following are the lis ...
- Android -- Home按键
游戏中常常需要监听android HOME键,当HOME键下压时,往往需要做一些状态保存,音效停止等操作,那么如何做,才能监听到HOME键呢?我们知道HOME是系统键,app中无法通过onKey这些函 ...
- 软件工程——四则运算3(C#)
一.设计思想 设计两个窗体,在第一个窗体中选择功能参数,在第二个窗体中显示所出题目. 二.源代码 Form1.cs: using System; using System.Collections.Ge ...
- IIS OCIEnvCreate failed with return code -1
现象:windows server2008服务器,MVC使用NHiberate连接Oracle11g,程序部署到IIS后无法访问数据库,抛上述异常:在服务器上安装VS调试可以访问数据库 解决方法:连接 ...
- 【CodeForces】【#285】Div.2
生平第一场Codeforce……纪念一下,虽然跪的跟渣渣似的……啊不就是跪成渣渣了…… A.B暴力过去的……不知道会不会超时……C我犯了个2B错误,让输出总共多少条边,我都求出来边集E了……直接输出E ...
- Net数值计算MathNet.Numerics类库
一.Net自带的数值计算:System.Numerics 1.大整数BitInteger 方法:除数和余数.最大公约数 2.复数Complex 属性:实部.虚部.量值.相位 方法:共轭.倒数 二.Ma ...
- Hdu 1506 Largest Rectangle in a Histogram 分类: Brush Mode 2014-10-28 19:16 93人阅读 评论(0) 收藏
Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
- IOS CoreData 多表查询demo解析
在IOS CoreData中,多表查询上相对来说,没有SQL直观,但CoreData的功能还是可以完成相关操作的. 下面使用CoreData进行关系数据库的表与表之间的关系演示.生成CoreData和 ...
- Sqli-labs less 27a
Less-27a 本关与27关的区别在于对于id的处理,这里用的是 " ,同时mysql的错误不会在前端页面显示. 我们根据27关直接给出一个示例payload: http://127.0. ...