在JAVA开发中,POJO、VO、DTO、Entity、Domain都是什么?他们有什么异同?

在 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 用于表示业务概念
大家在写项目的时候注意就行,刻意的去记忆没有必要,路本来是没有,走的人多了路就有了。。。


版权声明:本文为weixin_43783942原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。