目录
[1. PO (Persistent Object) - 持久对象](#1. PO (Persistent Object) - 持久对象)
[2. VO (Value Object) - 值对象](#2. VO (Value Object) - 值对象)
[3. DAO (Data Access Object) - 数据访问对象接口](#3. DAO (Data Access Object) - 数据访问对象接口)
[4. BO (Business Object) - 业务对象层](#4. BO (Business Object) - 业务对象层)
[5. DTO (Data Transfer Object) - 数据传输对象](#5. DTO (Data Transfer Object) - 数据传输对象)
[6. POJO (Plain Old Java Object) - 简单的 Java 对象](#6. POJO (Plain Old Java Object) - 简单的 Java 对象)
咱们今天就从程序员的视角,剖析一下这些术语,顺便给点生动的小例子,让这个话题不再是看得懂却说不清的尴尬存在。
1. PO (Persistent Object) - 持久对象
**PO 是什么?**PO 是数据库中的一张表,或者表中的一条记录在 Java 对象中的表现形式。可以简单理解为 PO 是和数据库强绑定的。它通常会和 ORM(比如 Hibernate、MyBatis)框架一起使用,用来持久化数据。
public class UserPO {
private Long id; // 数据库的主键
private String name; // 用户名
private String email; // 用户邮箱
// Getter 和 Setter
}
看出来了吗?这就是个标准的 PO,它的每个字段几乎都对应了数据库表里的列,没什么特别的业务逻辑,仅仅是为了存储和读取数据。
2. VO (Value Object) - 值对象
**VO 是什么?**VO 是用于展示数据的对象,通常是前端页面或者客户端需要的数据模型。它和 PO 不同,VO 关注的是"表现形式",而不是数据怎么来的。
java
public class UserVO {
private String name; // 展示用户名
private String email; // 展示用户邮箱
// Getter 和 Setter
}
比如,一个用户的 VO 可能只包含用户名和邮箱,而数据库里的 PO 则可能包含密码、创建时间等 VO 不需要的字段。你会发现 VO 通常是简化后的模型,更贴近用户界面的需求。
VO 的地位,就像你去相亲,PO 是你真实的户口本,而 VO 是你精修过的照片,展现的是用户想看的那一部分。
3. DAO (Data Access Object) - 数据访问对象接口
**DAO 是什么?**DAO 是用于操作数据库的接口,负责对 PO 的增删改查(CRUD)。它让我们避免直接把 SQL 写到业务代码里,保证了代码的可维护性和解耦性。
java
public interface UserDAO {
UserPO findById(Long id); // 根据 ID 查询用户
void save(UserPO user); // 保存用户
void delete(Long id); // 删除用户
}
用个场景来说,DAO 就像是去菜市场买菜的过程:你不会自己跑到地里摘菜,而是通过 DAO("买菜人")从数据库("地里")拿到 PO("蔬菜")。
4. BO (Business Object) - 业务对象层
**BO 是什么?**BO 关注的是业务逻辑,是在业务层里用来处理复杂逻辑的对象。BO 可以组合多个 PO 或者其他模型,专注于业务实现。
java
public class UserBO {
private Long id;
private String name;
public void activate() {
// 激活用户的业务逻辑
System.out.println("用户激活成功");
}
}
如果 PO 是数据存储的基石,BO 就是穿上西装准备开会的你------不但得有数据,还得有行为,处理各种业务需求。
5. DTO (Data Transfer Object) - 数据传输对象
**DTO 是什么?**DTO 主要用于在不同层之间传输数据,尤其是在服务调用(比如 REST 接口)或者分布式系统中传输数据时。DTO 和 VO 很像,但 VO 偏向于展示,而 DTO 偏向于跨层传输。
java
public class UserDTO {
private String name; // 用户名
private String email; // 用户邮箱
// Getter 和 Setter
}
DTO 的作用是"轻装上阵",剔除不必要的字段,只传递需要的数据,尽量减少传输的开销。
6. POJO (Plain Old Java Object) - 简单的 Java 对象
**POJO 是什么?**POJO 是所有这些模型的"老祖宗"。它只是一个不带任何框架和注解的普通 Java 对象,没有任何特殊的附加功能。POJO 可以是 PO、VO、DTO 的基础。
java
public class SimplePOJO {
private String data;
// Getter 和 Setter
}
写过 Java 的人几乎都会写 POJO,但 POJO 本身不是一个严格的规范,更多是个术语,用来形容那些普通又"纯净"的类。
所有复杂的模型,最终都是 POJO 的"子孙"。
区别与联系
到这里,你可能会问:这么多对象,怎么区分和使用呢?
-
PO、DAO
PO 和 DAO 是"数据库好搭档"。PO 是数据的实体,DAO 是负责操作 PO 的"搬运工"。
-
VO、DTO
VO 和 DTO 是"数据传输好兄弟"。VO 服务于前端,DTO 服务于跨层数据传输。两者都偏向于轻量化。
-
BO
BO 是业务逻辑的"大脑",它是最贴近实际需求的部分,包含了业务规则和实现。
-
POJO
POJO 是底层的基础,所有这些花哨的对象,都脱胎于普通的 POJO。
总结
- PO(Persistent Object)持久化对象 :
- 角色:真实的存储代表。
- 解释:PO与数据库中的表记录直接对应,通常用于表示数据库中的一行数据。它是数据持久化的核心,承载着数据的存储与检索任务。
- VO(View Object)视图对象 :
- 角色:漂亮的外衣。
- 解释:VO主要用于前端展示层,封装了展示给用户的数据。它根据用户需求进行定制,只包含前端需要展示的数据字段,为前端提供友好的数据接口。
- DAO(Data Access Object)数据访问对象 :
- 角色:操作PO的搬运工。
- 解释:DAO是数据访问层的核心,负责PO的持久化操作,如CRUD(创建、读取、更新、删除)等。它充当了PO与数据库之间的桥梁,使得业务逻辑层能够专注于业务处理,而无需关心数据持久化的细节。
- BO(Business Object)业务对象 :
- 角色:业务逻辑的操盘手。
- 解释:BO封装了业务逻辑的处理流程,是业务层的核心。它接收来自前端或其他服务的请求,调用DAO层进行数据访问,并根据业务需求进行数据处理和逻辑判断,最终返回处理结果。
- DTO(Data Transfer Object)数据传输对象 :
- 角色:传输数据的邮差。
- 解释:DTO主要用于服务之间的数据传输,它封装了需要传输的数据字段,并提供了数据的getter和setter方法。DTO使得服务之间的数据传输更加清晰和简洁,避免了传输不必要的数据字段。
- POJO(Plain Old Java Object)简单Java对象 :
- 角色:所有这些的原型。
- 解释:POJO是一个简单的Java对象,它不依赖于任何特殊的类库或框架,只包含Java语言的基本元素(如类、字段、方法等)。POJO可以作为其他复杂对象的原型或基础,通过添加特定的功能或属性来转变为其他类型的对象(如PO、VO、DAO、BO、DTO等)。
多理解,多实践,分清这些概念其实并不难。如果还觉得绕,不妨给自己写点代码试试,毕竟写代码才是检验理解的最佳方式。
如果文章对您有帮助,还请您点赞支持
感谢您的阅读,欢迎您在评论区留言指正分享