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

AI-摘要
LNotes-AI GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
各类 “O”(对象)定义与核心职责总结
Liuxz各类 “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 | 前端视图数据 / 不可变值 | 按前端需求封装,可隐藏敏感字段 | 接口响应、前端页面展示 |
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果



