什么是VO、DTO、Entity
在项目当中,我们经常会看到类似于UserVO.java
、UserDTO.java
、UserEntity.java
这样的类,这些类都是用来表示用户的,但是他们的作用是不一样的,下面我们来看看他们的区别。
DTO (Data Transfer Object)
举一个荔枝 :point_up:
UserInfoDTO.java
@Getter
public class UserInfoDTO {
private String token;
}
DTO
是前端传递给后端的数据,和 VO
类似,但是DTO
是用来传递数据的,而VO
是用来展示数据的。DTO
一般是由前端传递给后端的,所以DTO
里面不会存在业务逻辑
。不同的业务场景,DTO
也会有不同的实现,比如UserLoginDTO.java
、UserRegisterDTO.java
等等。UserInfoDTO
只有一个属性token
,我们获取用户信息就只需要一个token就可以了,所以这个类就是用来获取用户信息的。
再举一个荔枝 :point_up::point_up:
UserLoginDTO.java
@Getter
@Setter
public class UserLoginDTO {
private String username;
private String password;
}
:point_up::point_up:
UserRegisterDTO.java
@Getter
@Setter
public class UserRegisterDTO {
private String username;
private String password;
private String email;
private String phone;
}
VO (Value Object)
:point_up::point_up::point_up:
UserInfoVO.java
@Getter
@Setter
public class UserInfoVO {
private String uid;
private String username;
private String email;
private String phone;
private String avatar;
}
这个类的的作用主要是用来给前端展示使用的,也就是说,这个类是前端
需要的,所以在这个类里面也不会存在业务逻辑
。不同的VO
对应着不同的使用场景,不难看出UserInfoVo.java
就是通过token获取信息之后返回给前端的用户信息。类似的还有UserListVO.java
、UserDetailVO.java
等等,这就是VO
的作用。
Entity
:point_up::point_up::point_up::point_up:
UserEntity.java
@Getter
@Setter
public class UserEntity {
private String uid;
private String username;
private String password;
private String email;
private String phone;
private String avatar;
private String createTime;
private String updateTime;
private String deleted;
// ...
}
正如我们所看到的,Entity
里是包含了一个User的很多信息,但在DTO或VO不需要一些字段,比如password
、createTime
、updateTime
、deleted
等等,一般用于业务层和数据访问层(DAO)之间的数据传递,相当于领域模型中的一个实体,通常包含业务数据和一些相关操作方法。
::: info
与数据库交互有一个PO(持久化对象)
,与数据库中的表结构相对应,通常每个 PO 对象对应着关系型数据库中的一张表。
:::
总结
不同点 | 使用场景 | 数据结构 | 使用方式 |
---|---|---|---|
VO | 一般用于展示数据 | 只包含需要传输的数据字段 | 只使用基本类型和封装类型作为数据成员 |
DTO | 一般用于服务层和控制层之间的数据传输 | 只包含需要传输的数据字段 | 只使用基本类型和封装类型作为数据成员 |
PO | 用于数据库持久化操作 | 一般与数据库表相对应,包含表中的所有字段 | 可以包含其他 PO 或 Entity 对象作为其成员变量 |
Entity | 用于业务层和数据访问层(DAO)之间的数据传递 | 一般与数据库表相对应,包含表中的所有字段 | 可以包含其他 PO 或 Entity 对象作为其成员变量 |
::: tip 以上来自个人理解,如有错误,欢迎指正。 :::