没有合适的资源?快使用搜索试试~ 我知道了~
首页java DTO 详解
java DTO 详解
4星 · 超过85%的资源 需积分: 50 70 下载量 189 浏览量
更新于2023-07-10
2
收藏 261KB DOC 举报
java DTO 详解 java DTO 详解 java DTO 详解 java DTO 详解
资源详情
资源推荐
10.1 什么是 DTO
在分布式系统中,客户端和服务器端交互有两种情形:第一个是客户端从服务器端读取数
据;第二个是客户端将本身的数据传递给服务器端。
当有客户端要向服务器端传输大量数据的时候,可以通过一个包含要传输的所有数据的方
法调用
来完成。这在小数据量的时候缺点并不明显,但是如果要传递包含有大量信息的数据的时
候,这将变得难以忍受。下面的方法是任何人看了都会害怕的:
public void save(String id,String number,String name,int type,int height,
int width,BigDecimal weight,BigDecimal price,String description)
这种接口也是非常的脆弱,一旦需要添加或者删除某个属性,方法的签名就要改变。
当客户端要从服务器端取得大量数据的时候,可以使用多个细粒度的对服务器端的调用来
获取数据。比如:
ISomeInterface intf = RemoteService.getSomeInterface();
System.out.println("您要查询的商品的资料为:");
System.out.println("编号:"+intf.getNumber(id));
System.out.println("姓名:"+intf.getName(id));
System.out.println("类型:"+intf.getType(id));
System.out.println("高度:"+intf.getHeight(id));
System.out.println("宽度:"+intf.getWidth(id));
System.out.println("价格:"+intf.getPrice(id));
System.out.println("描述信息:"+intf.getDescription(id));
这种方式中每一个 get***方法都是一个对服务器的远程调用,都需要对参数和返回值进行
序列化
和反序列化,而且服务器进行这些调用的时候还需要进行事务、权限、日志的处理,这会
造成性
能的大幅下降。如果没有使用客户端事务的话还会导致这些调用不在一个事务中从而导致
数据错
误。
系统需要一种在客户端和服务器端之间高效、安全地进行数据传输的技术。DTO(Data
Transfer
Object,数据传送对象)是解决这个问题的比较好的方式。DTO 是一个普通的 Java 类,它
封装了要
传送的批量的数据。当客户端需要读取服务器端的数据的时候,服务器端将数据封装在
DTO 中,
这样客户端就可以在一个网络调用中获得它需要的所有数据。
还是上面的例子,服务器端的服务将创建一个 DTO 并封装客户端所需要的属性,然后返回
给客户
端:
ISomeInterface intf = RemoteService.getSomeInterface();
SomeDTOInfo info = intf.getSomeData(id);
System.out.println("您要查询的商品的资料为:");
System.out.println("编号:"+info.getNumber());
System.out.println("姓名:"+info.getName());
System.out.println("类型:"+info.getType());
System.out.println("高度:"+info.getHeight());
System.out.println("宽度:"+info.getWidth());
System.out.println("价格:"+info.getPrice());
System.out.println("描述信息:"+info.getDescription());
使用 DTO 的时候,一个主要问题是选择什么样的 DTO:这个 DTO 能够容纳哪些数据,
DTO 的结构是什
么,这个 DTO 是如何产生的。DTO 是服务器端和客户端进行通信的一个协议格式,合理
的 DTO 设计
将会使得服务器和客户端的通信更加顺畅。在水平开发模式(即每个开发人员负责系统的不
同层
,A 专门负责 Web 表现层的开发,B 专门负责服务层的开发)中,在项目初期合理的 DTO
设计会减少
各层开发人员之间的纠纷;在垂直开发模式(即每个开发人员负责不同模块的所有层,A 专
门负责
库存管理模块的开发,B 专门负责固定资产模块的开发)中,虽然开发人员可以自由地调整
DTO 的
结构,但是合理的 DTO 设计仍然会减少返工的可能性。
实现 DTO 最简单的方法是将服务端的域对象(比如 Hibernate 中的 PO、EJB 中的实体
Bean)进行拷贝
然后作为 DTO 传递。采用域对象做 DTO 比较简单和清晰,因为 DTO 与域模型一致,所以
了解一个结
构就够了。这样做也免去了 DTO 的设计,使得开发工作变得更快。这种做法的缺点是域
DTO 的粒度
太大以至于难以满足客户端的细粒度的要求,客户端可能不需要访问那些域中的所有属性,
也可
能需要不是简单地被封装在域中的数据,当域 DTO 不能满足要求的时候就需要更加细粒度
的 DTO 方
案。目前主流的 DTO 解决方案有定制 DTO、数据传送哈希表、数据传送行集。
10.2 域 DTO
域模型是指从业务模型中抽取出来的对象模型,比如商品、仓库。在 J2EE 中,最常见的域
模型就
是可持久化对象,比如 Hibernate 中的 PO、EJB 中的实体 Bean。
在分布式系统中,域模型完全位于服务器端。根据持久化对象可否直接传递到客户端,域
对象可
以分为两种类型:一种是服务器端的持久化对象不可以直接传递到客户端,比如 EJB 中的
实体
Bean 是不能被传递到客户端的;一种是持久化对象可以直接传递到客户端,比如
Hibernate 中的
PO 变为 detached object 以后就可以传递到客户端。
EJB 中的实体 Bean 不能直接传递到客户端,而且实体 Bean 不是一个简单的 JavaBean,
所以也不能
通过深度克隆(deep clone)创造一个新的可传递 Bean 的方式产生 DTO。针对这种情况,
必须编写
一个简单的 JavaBean 来作为 DTO。
剩余58页未读,继续阅读
Endell
- 粉丝: 2
- 资源: 57
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功