《传输对象模式》|J2EE企业架构模式
关键词:Transfer Object、DTO、数据传输对象、远程调用、批量数据传递
说明:传输对象模式不属于GOF23设计模式,属于J2EE企业架构模式
一、什么是传输对象模式
传输对象模式(Transfer Object Pattern):也叫DTO(Data Transfer Object)模式。用于远程调用场景,客户端和服务端之间通过一个简单POJO对象批量传输数据,减少远程调用次数。
传输对象只用来承载数据,不包含业务逻辑;服务端组装传输对象,一次性返回多条数据给客户端,避免多次远程方法调用。

核心意图
使用一个简单数据载体对象,批量封装数据进行跨层/远程传输,减少网络远程调用次数。
角色划分
- Client(客户端):远程调用方,向业务服务请求数据
- Business Object(业务对象BO):业务服务,处理业务逻辑,组装TransferObject
- Transfer Object(传输对象):纯数据载体,包含字段、get/set方法,无业务逻辑
数据流:
Client → BusinessObject → 组装TransferObject → 返回TransferObject → Client
二、UML结构图
角色划分:
- Client:发起请求
- BusinessObject:业务层,负责查询数据并封装成传输对象
- TransferObject:数据载体实体,仅保存数据

三、Java完整示例
模拟用户数据传输对象,代码全部使用英文。
// Transfer Object(DTO,仅承载数据)
public class StudentTO {
private String name;
private int rollNo;
public StudentTO(String name, int rollNo) {
this.name = name;
this.rollNo = rollNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getRollNo() {
return rollNo;
}
public void setRollNo(int rollNo) {
this.rollNo = rollNo;
}
}
// Business Object
public class StudentBO {
// 模拟数据库
public StudentTO getStudent() {
// 查询数据,组装传输对象
StudentTO studentTO = new StudentTO("Tom", 10001);
return studentTO;
}
public void updateStudent(StudentTO studentTO){
studentTO.setName("Tom Updated");
System.out.println("Update student in DB, new name: " + studentTO.getName());
}
}
// Client
public class Client {
public static void main(String[] args) {
StudentBO studentBO = new StudentBO();
// 获取传输对象
StudentTO studentTO = studentBO.getStudent();
System.out.println("Student Name: " + studentTO.getName());
System.out.println("Roll No: " + studentTO.getRollNo());
// 修改传输对象,回传服务端更新
studentTO.setName("Tom New");
studentBO.updateStudent(studentTO);
}
}
运行输出:
Student Name: Tom
Roll No: 10001
Update student in DB, new name: Tom Updated
四、传输对象模式 vs DAO模式
| 模式 | 定位 | 核心区别 |
|---|---|---|
| 传输对象模式 | J2EE架构模式,数据载体 | 创建DTO对象,用于跨层/远程传输数据,减少远程调用 |
| DAO模式 | J2EE架构模式,持久层封装 | 封装数据库CRUD操作,隔离业务层与数据库 |
经常搭配使用:DAO读取数据库实体 → BO组装TransferObject → 返回给表现层。
五、优缺点总结
✅ 优点
- 一次远程调用传输多条字段数据,大幅减少远程方法调用次数
- 分离领域实体与对外传输数据,保护内部领域模型
- 按需组装返回字段,避免暴露数据库全部字段
- 序列化友好,适合网络传输
❌ 缺点
- 增加类文件,需要维护DTO;实体与DTO之间需要做对象转换
- 数据同步成本:数据库字段变更,DTO可能需要同步修改
- 容易出现DTO膨胀,一个DTO承载过多无关字段
六、框架应用场景
- 早期J2EE EJB远程调用
- SpringBoot接口开发,接口入参、出参DTO
- RPC接口(Dubbo、gRPC)数据传输对象
- RESTful API前后端数据交互
七、小结
传输对象模式核心:创建仅承载数据的传输对象,在远程或者跨层调用时批量传递数据,减少远程调用次数;传输对象不包含任何业务逻辑。
归属:J2EE架构模式,不属于GOF23;日常开发中DTO就是传输对象模式的典型实现。
0 条笔记