各类 “O”(对象)定义与核心职责总结

各类 “O” 的设计核心是遵循单一职责原则,让不同对象专注于某一特定功能,避免职责混乱,提升代码可维护性。

1. POJO(Plain Ordinary Java Object):普通 Java 类

  • 定义:最基础的 Java 类,无特定框架依赖,仅包含字段、getter/setter、无参构造等基础结构。
  • 核心职责:纯粹的 “数据载体”,不包含业务逻辑、数据访问逻辑或传输相关处理。
  • 使用场景:作为所有 “O” 的基础形态,其他专用对象(如 VO、DTO)本质上都是 POJO 的细分。

2. DAO(Data Access Object):数据访问对象

  • 定义:专门负责与数据库(或其他数据源)交互的对象。
  • 核心职责:封装数据访问逻辑,如执行 SQL 语句、调用 ORM 接口(MyBatis、JPA),提供 “增删改查” 操作方法。
  • 使用场景:隔离业务层与数据层,业务层通过调用 DAO 方法操作数据,无需关注具体数据库交互细节。

3. DTO(Data Transfer Object):数据传输对象

  • 定义:专门用于跨层、跨服务传输数据的对象。
  • 核心职责:按需封装传输所需的数据,避免传输冗余字段,优化数据传输效率(如服务间调用、分布式系统通信)。
  • 使用场景:例如微服务 A 调用微服务 B 时,微服务 B 返回的 “用户基本信息 + 订单数量” 组合数据,用 DTO 封装后传输。

4. TO(Transfer Object):传输对象

  • 定义:与 DTO 功能高度类似,均为 “数据传输” 而生,部分场景下二者可视为同义。
  • 核心职责:专注于数据在不同模块 / 系统间的传递,仅包含传输所需的字段和基础 getter/setter。
  • 使用场景:较 DTO 更通用,无明确 “跨服务” 或 “跨层” 限制,只要是数据传输场景均可使用。

5. BO(Business Object):业务对象

  • 定义:专门封装业务数据和业务逻辑的对象。
  • 核心职责:承载业务相关数据(如 “订单业务” 中的订单状态、优惠规则数据),并包含对应的业务处理方法(如计算订单金额、判断订单是否可取消)。
  • 使用场景:业务层(Service)的核心对象,是业务逻辑的具体载体,例如 “OrderBO” 封装订单相关业务。

6. VO(View/Value Object):视图对象 / 值对象

  • 定义:分为 “视图对象” 和 “值对象” 两类,日常开发中 “视图对象” 更常用。
  • 核心职责
    • 作为 “视图对象” 时:专门封装前端页面(或接口响应)所需的数据,按前端展示需求筛选字段(如隐藏敏感字段 “密码”)。
    • 作为 “值对象” 时:封装不可变的数据(如 “金额”“地址”),无唯一标识(ID),仅通过属性值判断相等性。
  • 使用场景:例如接口返回给前端的 “用户列表 VO”,仅包含 “用户名、手机号、头像” 等前端需展示的字段。

关键区分表

类型 核心职责 核心特点 典型使用层 / 场景
POJO 基础数据载体 无特定职责,最通用 所有层(作为基础)
DAO 数据访问(操作数据库) 封装 SQL/ORM 操作 数据访问层(DAO 层)
DTO 跨层 / 跨服务数据传输 按需筛选字段,优化传输 服务间调用、层间传递
TO 数据传输 与 DTO 类似,更通用 模块 / 系统间数据传递
BO 封装业务数据与逻辑 包含业务方法,承载业务规则 业务逻辑层(Service 层)
VO 前端视图数据 / 不可变值 按前端需求封装,可隐藏敏感字段 接口响应、前端页面展示