了解dto概念
此博文收集整理了一些主流的文章对于DTO模式的解读,他们大体相似而又各有所不同。对于设计模式的解读也是一个仁者见仁智者见智的事情,不过设计模式往往都是前辈们在遇到一类特定的问题下而总结的经验和智慧。看不同大牛对同一概念的解读,对比思考,本身就是对于我们思维的一次洗礼。(所有文章均贴有出处,在此感谢大牛们的辛勤劳作。)
什么是DTO?
百度百科如何解读的?
DTO是Data Transfer Object 的简写,既数据传输对象。
是一种设计模式之间传输数据的软件应用系统。数据传输目标往往是数据访问对象从数据库中检索的数据。数据传输对象与数据交互对象或数据访问对象之间是一个不具备有任何行为除了存储和检索的数据。(访问和存取器)
维基百科是如何解读的?
A data transfer object(DTO) is an object that carries data between two process.
The difference between data transfer and business objects or data access objects is that a DTO does not have any behavior except for storage and retrieval of its own data(mutators and accesssors).DTOs are simple objects that should not contain any business logic that would require testing.
和百度百科不同的是,DTO和MO(Model Object)与BO(Business Object)的不同之处在于DTO没有任何业务行为(贫血模式)只作为数据的存储。
References 下有许多有料的参考文章。
有经典的文章是如何解读的?
博客园dax.net的观点:
表现层于应用层之间是通过DTO来进行交互的,数据传输对象是没有行为的POCO对象,他的目的是为了对领域对象进行数据封装,实现层与层之间的数据传递。为何不直接将领域对象进行数据传递?因为领域对象更注重领域,DTO更注重数据。由于“富领域模型”的特点,这样会直接将领域对象的行为暴露给表现层。
DTO本身不是业务对象,他是根据UI需求进行设计的。简单来说Model面向业务,我们是通过业务来定义Model的。而DTO是面向UI,通过UI的需求来定义的,通过DTO我们实现了表现层与Model层之间的解耦,表现层不引用Model。如果开发过程中我们的模型变了,而界面没变,我们只需改Model而不需要去改动表现层。
博客园loveis715的观点:
DTO用于在服务器与客户端之间或服务器与服务器之间进行数据传递,文章从问题出发,然后深入浅出的讨论了DTO以及相关的概念,值得一读。
微软MSDN的观点:
Create a data transfer object(DTO) that holds all data that is required for the remote call.Modify the remote signature to accept the DTO as the single parameter and to return a single DTO to the client.After the calling application receives the DTO and and stores it as a local object , the application can make a series of individual procedure calls to the DTO without incurring the overhead of remote calls.
大致的观点是DTO可以有效的减少请求数量,文章中包含示例,讨论了问题的由来(为什么需要DTO),以及DTO使用过程中的一些注意事项。不过在文章的开头说到这个设计模式已经过时了,从此来看技术的更新迭代真的是很快,只是不知道DTO为什么过时了?以及哪些新的技术替代了DTO?
原文链接:
https://msdn.microsoft.com/en-us/library/ms978717.aspx
Pattern of Enterprise Application Architecture 作者观点:
An object carries data between two processes in order to reduce the number of method calls.
When you are working with a remote interface,such as Remote Facade,each call to it is expensive.As a result you should reduce the number of calls, and that means that you need to transfer more data with each call.One way to do this is to use lots of parameters.
However, this is often awkward to program - indeed,it's often impossible with languages such as Java that return only a single value.
The solution is to create a Data Transfer Object that can hold all the data for the call.It needs to be serializable to go across the connection.Usually an assembler is used on the server side to transfer data between the DTO and any domain objects.
Although the main reason for using a Data Transfer Object is to batch up what would be mutiple remote calls into single call,it's worth mentioning that another advantage is to encapsulate the serialization mechanism for transferring data over write.By encapsulating the serialization like this ,the DTOs keep this logic out of the rest of the code and also provide a clear point to change serialization should you wish.
原文链接:
观点和loveis715有一致的地方,简而言之DTO的存在就是为了帮助我们减少客户端请求而降低服务器压力,提升效率。作者还有一个观点大概是指在使用DTO后我们可以灵活定义数据模型,同时将数据模型和逻辑剥离开了。
- DTO概念
在开发过程中用到了DTO,简单了解了一下. DTO:数据传输对象,用来连接表现层和应用层之间的数据交互.数据传输对象是没有行为的POJO对象,它的目的只是为了对领域对象进行数据封装,实现层与层之间的数 ...
- VO、DTO与领域模型的概念
业务对象模型(也叫领域模型 domain model)是描述业务用例实现的对象模型.它是对业务角色和业务实体之间应该如何联系和协作以执行业务的一种抽象.业务对象模型从业务角色内部的观点定义了业务用例. ...
- Java中PO、DO、DTO、 VO、 BO、POJO 、DAO、TO的概念
1. PO(persistant object) 持久对象 在 O/R 映射的时候出现的概念,如果没有 O/R 映射,没有这个概念存在了. 通常对应数据模型 ( 数据库 ), 本身还有部分业务逻辑的 ...
- POJO,JaveBean,VO,DTO
POJO - POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称. 使用POJO名称是为了避免和EJ ...
- VO(视图模型) 与 DTO(数据传输对象)的区别
目录 VO(视图模型) 与 DTO(数据传输对象)的区别 1.VO与DTO概念 2.VO 视图模型的必要性与解耦 2.1 视图模型 2.2 视图模型存在的必要性 2.3 视图模型的解耦 3.DTO 存 ...
- 【AutoMapper官方文档】DTO与Domin Model相互转换(中)
写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...
- 采用Lambda表达式快速实现实体模型对象转换到DTO
在项目中,采用code first时建立的模型对象不能直接用于数据传输,需要从新根据需求建立Dto对象 为什么需要建立Dto对象呢? DTO即数据传输对象.之前不明白有些框架中为什么要专门定义DTO来 ...
- ABP理论学习之数据传输对象(DTO)
返回总目录 本篇目录 为何需要DTO 领域层抽象 数据隐藏 序列化和懒加载问题 DTO惯例和验证 DTO和实体的自动映射 使用特性和扩展方法进行映射 帮助接口 DTO用于应用层和 展现层间的数据传输. ...
- 应用程序框架实战三十四:数据传输对象(DTO)介绍及各类型实体比较
本文将介绍DDD分层架构中广泛使用的数据传输对象Dto,并且与领域实体Entity,查询实体QueryObject,视图实体ViewModel等几种实体进行比较. 领域实体为何不能一统江湖? 当你阅读 ...
随机推荐
- [ios]"The identity used to sign the executable is no longer valid"错误解决方法
重新去开发者网站,申请一遍profiles 参考:http://www.bubuko.com/infodetail-982908.html 我出现这个错误的情况,程序提交app store之后,第二天 ...
- 《剑指offer》第三十八题(字符串的排列)
// 面试题38:字符串的排列 // 题目:输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc, // 则打印出由字符a.b.c所能排列出来的所有字符串abc.acb.bac.bca ...
- JSON和JS对象之间的互转【转】
1. jQuery插件支持的转换方式 $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象 2. 浏览器支持的 ...
- WPF 元素的查找
预设置元素名字 WPF有两种方式设置元素的Name <StackPanel x:Name="panel"> <Label Name="name1&quo ...
- Jersey 2.x 前言和约定的文本格式
这是Jersey 2.x 的用户指南.我们极力将它能与我们新增的功能保持一致.当阅读本指南,作为补充,也请移步至Jersey API documentation查看 Jersey 的特性和 API. ...
- 『PyTorch』第四弹_通过LeNet初识pytorch神经网络_下
『PyTorch』第四弹_通过LeNet初识pytorch神经网络_上 # Author : Hellcat # Time : 2018/2/11 import torch as t import t ...
- angularjs 中的scope继承关系——(1)
转自:http://www.lovelucy.info/understanding-scopes-in-angularjs.html JavaScript 的原型链继承 假设父类 parentScop ...
- javascript的逼格
1.解释性脚本语言,无需编译,逐行解释运行 2.跨平台性,不依赖操作系统,只需要浏览器支持 javascript引擎:单线程
- SQL Server 调优系列基础篇 - 并行运算总结(一)
前言 上三篇文章我们介绍了查看查询计划的方式,以及一些常用的连接运算符.联合运算符的优化技巧. 本篇我们分析SQL Server的并行运算,作为多核计算机盛行的今天,SQL Server也会适时调整自 ...
- bzoj1572
题解: 每一次不能满足的时候 找一个之前有过的 然后最小的 和他替换 代码: #include<bits/stdc++.h> using namespace std; ; long lon ...