区分JAVA项目中的ENTITY,VO,DTO,BO

前言

在Java项目中,ENTITY、VO、DTO和BO是常见的设计模式或者概念,用于表示不同的数据层次和对象之间的关系。

了解这些概念助于在项目中分离关注点,提高代码的可维护性和可扩展性。 ENTITY用于持久层,VO和DTO用于在不同层之间传输数据,BO则负责处理业务逻辑。
在这里插入图片描述

1. ENTITY

此包中常定义的都是实体类: 实体类表示领域模型中的对象,通常映射到数据库表。它包含了与业务相关的数据和行为。

作用和意义: 用于持久层,表示数据库表的结构和关系,负责与数据库的交互。

示例: 在一个博客应用中,可能有一个UserEntity表示用户,包含用户的ID、用户名、密码等字段。

public class UserEntity {
    
    
    private Long id;
    private String username;
    private String password;
    // 其他字段和方法
}
  • 注解和映射: 通常使用持久化框架(如Hibernate)时,可以使用注解进行实体类的映射。例如,使用@Entity、@Id等注解。
  • 数据校验: 在实体类中可以使用注解进行数据校验,确保数据的完整性和正确性。例如,使用@NotNull、@Size等注解。
@Entity
public class UserEntity {
    
    
    @Id
    private Long id;

    @NotNull
    @Size(min = 4, max = 20)
    private String username;

    // 其他字段和方法
}

2. VO

此包中常定义的是前端的值对象:一个没有标识的对象,主要用于传输数据而不是持久化。它通常用于封装少量相关的属性。

作用和意义: 用于服务层或前端展示,传递少量相关的信息。

示例: 一个用户信息的VO,只包含展示需要的字段。

public class UserVO {
    
    
    private String username;
    // 其他展示需要的字段
    // 没有ID和密码等敏感信息
}
  • 不可变性: 值对象通常应该是不可变的,即一旦创建就不能被修改,以确保在传递和使用过程中的一致性。

DTO和VO的区分: VO主要用于前端展示,而DTO则更多用于在不同层之间传输数据,可以包含更多的业务逻辑

3. DTO

此包中常定义的是数据传输对象:用于在不同层之间传输数据,通常是无业务逻辑的纯数据对象。

作用和意义: 用于服务层和控制层之间的数据传递,将多个实体的信息组合成一个DTO。

示例: 一个博客的文章DTO,可能包含文章信息和作者信息。

public class ArticleDTO {
    
    
    private String title;
    private String content;
    private UserVO author;
    // 其他相关信息
}
  • 灵活性: DTO可以根据需要组合不同的实体信息,以减少前后端数据传输时的次数。
  • 版本控制: 在不同的API版本中,可以通过不同版本的DTO来控制传输的数据。

4. BO

此包中常定义的是业务对象:包含业务逻辑,负责封装业务规则和处理业务流程。

作用和意义: 用于业务逻辑层,处理复杂的业务操作,可能涉及多个实体和数据的处理。

示例: 一个购物车的业务对象,处理购物车中商品的添加、删除、计算总价等业务逻辑。

public class ShoppingCartBO {
    
    
    private List<ProductDTO> items;
    // 其他业务逻辑和方法
}
  • 事务控制: 业务对象通常涉及到复杂的业务逻辑,可能需要在事务中执行,确保操作的一致性。
  • 依赖注入: 业务对象可能需要依赖其他服务或组件,可以通过依赖注入来管理它们。
@Service
public class ShoppingCartBO {
    
    
    private final ProductService productService;

    @Autowired
    public ShoppingCartBO(ProductService productService) {
    
    
        this.productService = productService;
    }

    // 其他业务逻辑和方法
}

5. 总结

四者常用驼峰命名法,例如UserEntity、UserVO、ArticleDTO、ShoppingCartBO

  • ENTITY(实体类)
    在实体类中避免使用数据库关键字,确保表达清晰。

  • VO(值对象)
    如果值对象是不可变的,可以考虑将其字段设置为final。

  • DTO(数据传输对象)
    DTO通常用于在不同层之间传输数据,可以根据需要组合不同实体的信息。

  • BO(业务对象)
    BO通常用于包含业务逻辑,可能需要依赖其他服务或组件。

猜你喜欢

转载自blog.csdn.net/weixin_47872288/article/details/134879336
今日推荐