DTO,VO,BO,DO

简单记忆:

  • VO → 前端看的

  • DTO → 接口传的

  • DO → 数据库存的

  • BO → 业务算的

  • VO (View Object):前端展示数据对象,只包含页面需要的数据,隐藏不必要字段,减少传输量并保护数据库结构。

  • DTO (Data Transfer Object):层间传输数据对象,用于Controller/Service等交互,可能与VO字段相似但设计目的不同(如API定制字段)。

  • DO (Data Object):数据库映射对象,与表字段一一对应(如User类对应user表),通常为Entity实体类。

  • BO (Business Object):业务逻辑对象,抽象现实中的业务实体(如订单+用户=订单BO),封装多表关联的复杂业务逻辑。

交互流程示例:

flowchart LR
   前端 -- 提交DTO --> 后端 
   后端 -- 返回VO --> 前端
   后端内部: DTO --> Service --> BO --> DO --> 数据库

### DTOVODOBO 的定义与区别 #### 定义 - **DTO(Data Transfer Object)** 数据传输对象,主要用于在不同的软件层之间传递数据,例如展示层(Controller)和服务层(Service)。其设计目的是减少网络通信次数并优化性能[^2]。 - **VO(View Object)** 视图对象,专门用于前端页面显示的数据结构。VO 是面向用户的,通常会根据具体的界面需求定制字段[^1]。 - **DODomain Object 或 Data Object)** 领域对象或数据对象,代表数据库中的表结构,通常是 ORM 工具映射的对象。DO 主要负责存储实体的属性以及与数据库交互的操作[^4]。 - **BO(Business Object)** 业务对象,封装了业务逻辑和处理流程。BO 中可能包含额外的计算字段或其他辅助信息,这些信息不一定需要暴露给外部接口或存储到数据库中[^3]。 --- #### 区别与用法 ##### 1. **DTOVO** - **区别**: 虽然两者都涉及数据呈现,但它们的设计理念不同。DTO 更注重跨层间高效的数据传输,而 VO 则专注于满足视图层面的具体需求。例如,在某些场景下,API 返回的结果可能经过加工后再返回给客户端,这种加工后的结果就是 VO[^2]。 - **用法**: - DTO 常见于 Controller 和 Service 层之间的数据交换。 - VO 多用于最终渲染至前端页面或作为 API 接口响应的内容。 ```java // 示例:DTO 类型 public class UserDTO { private String name; private int age; // Getter and Setter methods... } // 示例:VO 类型 public class UserVO { private String displayName; // 经过加工的名字 private boolean isAdult; // 是否成年标志位 // Getter and Setter methods... } ``` --- ##### 2. **DODTO** - **区别**: DO 表示的是数据库中的实际记录,具有固定的字段集合;而 DTO 是一种轻量级的对象形式,可以根据特定需求裁剪字段。例如,当只需要部分字段时,可以直接创建一个精简版的 DTO 来代替完整的 DO[^4]。 - **用法**: - DO 一般由持久化框架生成,直接映射到数据库表。 - DTO 则是在服务层构建,仅保留必要的字段供其他模块使用。 ```java // 示例:DO 类型 @Entity @Table(name = "users") public class UserDO { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private String passwordHash; // Other fields, getters, setters... } // 示例:DTO 类型 public class SimplifiedUserDTO { private String username; // Getter and Setter methods... } ``` --- ##### 3. **BODTO** - **区别**: BO 关注的是复杂的业务逻辑实现,可能包含了临时变量、中间状态以及其他不参与序列化的元数据;相比之下,DTO 更加简洁明了,只关注核心数据本身。 - **用法**: - BO 在服务层内部执行复杂运算时非常有用,能够承载更多上下文信息。 - DTO 则适合用来简化对外部系统的依赖关系,降低耦合度。 ```java // 示例:BO 类型 public class OrderBO { private List<Item> items; // 订单项列表 private double subtotalAmount; // 子总计金额(动态计算) private double taxRate; // 税率 public void calculateTotal() { ... } // 自定义方法 // Fields, constructors, getters, setters... } // 示例:DTO 类型 public class OrderDTO { private long orderId; private double totalAmount; // Getter and Setter methods... } ``` --- ##### 总结对比表格 | 名称 | 描述 | 使用范围 | |----------|-----------------------------------------------------------------------------------------|----------------------------------| | DTO | 数据传输对象,用于层间的高效数据传递 | 控制器 ↔ 服务 | | VO | 视图对象,专为前端展示准备 | 页面渲染 / API 输出 | | DO | 数据库对象,表示数据库中的表 | 持久化操作 | | BO | 业务对象,封装业务逻辑及相关辅助数据 | 服务层内部业务处理 | --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值