设计模式-数据传输对象(Data Transfer Object)

概念

一个为了减少调用次数而在进程间传输数据的对象。


使用远程外观每一次调用都会传输大量的数据,仅仅靠返回参数无法解决。
数据传输对象可以保留所有调用需要用到的数据;
数据传输对象需要序列化,便于传输,一般地,在服务器方使用一个组装器,负责在DTO和任何领域对象之间传输数据。

运行机制

  • 远端对象请求数据时,将询问一个合适的数据传输对象,而数据传输对象所提供的数据会远远大于远端对象请求的数据;
  • 数据传输对象通常包含很多服务器对象,集结所有远端对象可能需要的数据;
  • 数据传输对象中的域结构简单,便于序列化,使传输双方容易理解;
  • 基于客户端的需求,为同一个服务采用多个数据传输对象也是可能的;
  • 采用一个或者多个数据传输对象处理交互,要根据系统特点灵活掌握;
  • 请求方和发送方各自准备一个数据传输对象,或者共用一个数据传输对象,也需要灵活掌握;
  • 采用可变的还是不可变的数据传输对象,需要灵活掌握;
  • SQL查询产生的记录集就可以看成一种数据传输对象;
  • 集合、字典、生成器都可以作为数据传输对象的格式,如数组;
  • 数据传输对象必须有能力序列化自己,可以采用二进制序列化格式(Java和.NET都提供)、文本格式(XML)。
  • 数据传输对象和领域对象相互之间不应该有依赖,因此需要一个组装器对象,它保持了领域模型和数据传输对象二者的相对独立性。

使用时机

  • 需要在一个方法调用中在两个进程之间传输多个数据项时,采用数据传输对象。
  • 数据传输对象可以有多种实现方法:
  1. 不使用任何对象,仅使用简单的set或get方法,但是get只能返回一个对象,即使还可以采用set方法,但必须有回调机制的情况下检索信息。
  2. 直接使用某种字符串表示形式,而不使用对象做接口。但程序其他部分域字符串表示形式耦合。
  3. 采用XML传递数据时,最后采用数据传输对象进行封装。
  4. 作为不同软件层中各种组件通讯的通用数据源。此时,每个组件对数据传输对象做修改,然后传递到下一层。

示例-传输唱片信息(java)


把领域模型生成一个数据传输对象的代码(通过分析领域模型可知,artist类的相关数据被放到了albumDTO类中,而一个track的performer被表示成一个字符串数组) :


从数据传输对象中创建唱片对象:


从数据传输对象中更新已有唱片对象:


示例-使用XML实现序列化(java)

把数据传输对象序列化成XML格式


最后:对XML文件的输入输出

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值