📦 1. DTO(Data Transfer Object)数据传输对象
比喻:快递包裹📦
想象你在网上购物,商家把商品打包成包裹,通过快递从仓库运到你家
- 用途:服务之间传输数据的容器
- 场景:
- 微服务 A 调用微服务 B 时传递的参数
- Controller 接收前端提交的表单数据
- 特点:
- 只包含传输所需字段(如:订单ID + 商品列表)
- 没有业务逻辑(纯数据载体)
- 代码示例:
javaCopy Code
// 订单创建DTO(前端 → 后端) public class OrderCreateDTO { private Long userId; private List<OrderItemDTO> items; private String deliveryAddress; // 只有getter/setter,没有业务方法 }
2. BO(Business Object)业务对象
比喻:工厂生产线⚙️
包裹到达分拣中心后,工人拆包检查、组装配件、贴标签等加工过程
- 用途:封装核心业务逻辑的对象
- 场景:
- Service 层处理业务逻辑
- 操作多个数据源的聚合
- 特点:
- 包含业务状态和行为(如:计算订单总价)
- 可能组合多个实体对象
- 代码示例:
javaCopy Code
// 订单业务对象 public class OrderBO { private Order order; // 订单实体 private User user; // 用户实体 private Payment payment; // 支付实体 // 业务方法:计算订单总价 public BigDecimal calculateTotal() { return order.getItems().stream() .map(item -> item.getPrice().multiply(item.getQuantity())) .reduce(BigDecimal.ZERO, BigDecimal::add); } // 业务方法:校验库存 public boolean checkInventory() { return order.getItems().stream() .allMatch(item -> stockService.hasStock(item)); } }
🖼️ 3. VO(View Object)视图对象
比喻:礼品包装🎁
工厂加工好的商品,经过精美包装后展示给顾客的样子
- 用途:返回给前端的展示数据
- 场景:
- Controller 返回给前端的数据
- 接口响应对象
- 特点:
- 按前端需求定制数据结构(如:组合多表字段)
- 包含展示逻辑(如:日期格式化)
- 过滤敏感数据(如:隐藏密码字段)
- 代码示例:
javaCopy Code
// 订单详情VO(后端 → 前端) public class OrderDetailVO { private String orderNo; private String userName; // 组合用户表字段 private String formattedDate; // 格式化后的日期 private String statusLabel; // 状态转中文 private List<ProductVO> items; // 嵌套VO // 转换方法(BO → VO) public static OrderDetailVO fromBO(OrderBO bo) { OrderDetailVO vo = new OrderDetailVO(); vo.setOrderNo(bo.getOrder().getNo()); vo.setUserName(bo.getUser().getName()); vo.setFormattedDate(formatDate(bo.getOrder().getCreateTime())); // ...其他赋值逻辑 return vo; } }
🌉 完整流程示例(电商下单)
mermaidCopy Code
sequenceDiagram Frontend->>Controller: 提交订单CreateDTO Controller->>Service: 传入DTO Service->>Service: 创建OrderBO Service->>Service: bo.checkInventory() Service->>Service: bo.calculateTotal() Service->>Database: 保存数据 Service->>Controller: 返回OrderResultVO Controller->>Frontend: 返回VO数据
📊 三者的核心区别
| 对象 | 生命周期 | 包含内容 | 典型场景 |
|---|---|---|---|
| DTO | 跨层传输时 | 纯数据字段 | 接口参数接收 |
| BO | 业务处理过程中 | 数据+业务逻辑 | Service内部业务操作 |
| VO | 数据返回时 | 定制化展示数据 | 接口返回给前端的数据结构 |
💡 关键记忆点
- DTO 是入口:像快递箱,装着原始数据进入系统
- BO 是车间:在业务层被拆解、加工、组合
- VO 是出口:像礼品盒,把最终结果美观地展示出去
DTO、BO、VO的区别与应用解析
672

被折叠的 条评论
为什么被折叠?



