在 Java 开发中,POJO、VO、DTO、Entity 和 Domain 都是不同的概念,它们用于描述系统中不同层次或者模块中的数据对象或实体。下面是它们的区别:
一、POJO(Plain Old Java Object)
POJO(Plain Old Java Object):是一种轻量级的 Java 对象,它没有继承任何特定的框架或者实现特定的接口。它通常用于表示简单的数据模型或者传输数据。POJO 对象没有业务逻辑,只包含属性和属性的 getter/setter 方法。
举例来说,假设有一个名为 User 的 POJO 类,用于表示系统中的用户信息:
public class User {
private String name;
private int age;
// getter/setter methods
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
二、VO(Value Object)
VO(Value Object):是一种特殊的 POJO 对象,它通常用于封装系统中的返回值或者展示层的数据模型。VO 对象通常不包含业务逻辑,只包含数据的 getter 方法,它的作用是为了方便数据的展示和传输。
举例来说,假设有一个名为 UserVO 的 VO 类,用于表示系统中的用户信息:
public class UserVO {
private String name;
private int age;
// getter methods
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
三、DTO(Data Transfer Object)
DTO(Data Transfer Object):是一种专门用于数据传输的对象,通常用于封装系统中的业务数据,将业务数据从一层传递到另一层。DTO 对象通常包含多个属性,并且可以通过构造函数或者 setter 方法来设置属性值。
举例来说,假设有一个名为 UserDTO 的 DTO 类,用于表示系统中的用户信息:
public class UserDTO {
private String name;
private int age;
private String email;
// constructors
public UserDTO() {}
public UserDTO(String name, int age, String email) {
this.name = name;
this.age = age;
this.email = email;
}
// getter/setter methods
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
四、Entity
Entity:是一种表示系统中的数据实体或者持久化对象的类。Entity 通常用于表示数据库中的表或者文档,它通常与数据存储和访问相关,包含数据持久化的方法和属性。在 JPA (Java Persistence API) 中,Entity 通常被映射为数据库中的表。
举例来说,假设有一个名为 UserEntity 的 Entity 类,用于表示系统中的用户信息:
@Entity
@Table(name = "user")
public class UserEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private int age;
private String email;
// getter/setter methods
// ...
}
五、Domain(领域对象)(最开始学就经常用哈哈)
Domain(领域对象):是一种在领域模型中用于表示业务概念的对象。Domain 对象通常包含多个属性,也可以包含一些业务逻辑,表示业务领域中的实体或者对象。Domain 对象通常被设计为可变的,用于支持业务逻辑的复杂性。
举例来说,假设有一个名为 UserDomain 的 Domain 类,用于表示系统中的用户信息:
public class UserDomain {
private String name;
private int age;
private String email;
public UserDomain(String name, int age, String email) {
this.name = name;
this.age = age;
this.email = email;
}
// getter/setter methods
// ...
public void setEmail(String email) {
// 对 email 进行验证和处理
if (isValidEmail(email)) {
this.email = email;
} else {
throw new IllegalArgumentException("Invalid email address");
}
}
// 业务逻辑方法
public void increaseAge() {
this.age++;
}
private boolean isValidEmail(String email) {
// 验证 email 地址是否合法
// ...
}
}
结尾
总的来说,这些对象都是用于在不同层次或者模块中表示数据的对象,它们之间的区别在于用途和作用域不同。POJO 通常是一个简单的数据模型对象,VO 用于表示展示层数据模型,DTO 用于传输数据,Entity 用于持久化数据,Domain 用于表示业务概念。
大家在写项目的时候注意就行,刻意的去记忆没有必要,路本来是没有,走的人多了路就有了。。。