首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 25-03-03 21:21
  • 3601
  • 9045
blog.csdn.net

目录

  • 前言
  • 1. ENTITY
  • 2. VO
  • 3. DTO
  • 4. BO
  • 5. 总结

前言

在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;
    // 其他字段和方法
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 注解和映射: 通常使用持久化框架(如Hibernate)时,可以使用注解进行实体类的映射。例如,使用@Entity、@Id等注解。
  • 数据校验: 在实体类中可以使用注解进行数据校验,确保数据的完整性和正确性。例如,使用@NotNull、@Size等注解。
@Entity
public class UserEntity {
    @Id
    private Long id;

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

    // 其他字段和方法
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2. VO

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

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

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

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

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

3. DTO

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

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

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

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

4. BO

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

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

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

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

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

    // 其他业务逻辑和方法
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

5. 总结

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

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

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

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

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

文章知识点与官方知识档案匹配,可进一步学习相关知识
Java技能树首页概览145194 人正在系统学习中
码农研究僧
微信公众号
1.框架等前沿技术 2.日常生活 3.技术交流
注:本文转载自blog.csdn.net的码农研究僧的文章"https://blog.csdn.net/weixin_47872288/article/details/134879336"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top