一、POJO(Plain Old Java Object,简单老式 Java 对象)
使用场景:作为一种简单、通用的 Java 对象,可用于构建应用程序的各种基础数据结构和业务对象,不依赖于特定的框架或技术,具有良好的可移植性和通用性
所在层:可以在项目的各个层中使用,如在 Controller 层可以作为参数接收前端传来的数据或作为返回值返回给前端,在 Service 层可以作为业务逻辑处理的对象,在 DAO 层也可以作为与数据库交互的中间对象进行数据的临时存储和转换等操作。例如,一个简单的 Java Web 项目中,在 Controller 层接收前端传来的包含用户注册信息的 POJO 对象,然后将其传递给 Service 层进行业务逻辑处理,Service 层处理完成后可以将包含处理结果的 POJO 对象返回给 Controller 层,再由 Controller 层返回给前端
二、VO(Value Object) 值对象
使用场景:主要用于展示层,用于封装需要展示给用户的数据,将业务逻辑层处理后的数据按照展示需求进行组合和封装,以满足前端页面展示的要求
所在层:通常在 Controller 层与 Service 层之间传递,由 Service 层根据业务数据创建并返回给 Controller 层,再由 Controller 层将其传递给前端页面进行展示。 例如,在一个用户管理系统中,Controller 层调用 Service 层的获取用户信息方法,Service 层返回包含用户姓名、年龄、性别等基本信息的 VO 对象给 Controller 层,Controller 层将其转发给 JSP 页面或通过 JSON 格式返回给前端框架进行展示
三、DTO(Data Transfer Object,数据传输对象)
使用场景:用于在不同系统、不同模块或不同层之间传输数据,目的是减少层与层之间或系统与系统之间的耦合度,只传递必要的数据,避免传递过多不必要的信息
所在层:它可以在各个层之间传递,如在 Controller 层与 Service 层之间、Service 层与 DAO 层之间,甚至在不同微服务之间传递。比如,在一个电商系统中,下单操作时,前端页面通过 Controller 层将包含商品信息、用户收货地址等的 DTO 传递给 Service 层,Service 层可能会进一步将该 DTO 中的部分信息传递给 DAO 层用于数据持久化操作,或者将其传递给其他相关微服务进行协同处理
四、BO(Business Object,业务对象)
使用场景:封装了业务逻辑和业务数据,是业务逻辑层的核心对象,用于处理复杂的业务逻辑和业务规则
所在层:主要存在于 Service 层,Service 层通过调用 BO 的方法来执行业务操作和处理业务逻辑。以订单处理业务为例,OrderBO 会包含计算订单总价、处理订单状态变更、验证订单信息合法性等业务逻辑方法,Service 层在处理订单相关业务时,会创建和使用 OrderBO 对象来完成这些业务操作
五、Entity(实体对象)
使用场景:与数据库中的表结构相对应,用于实现数据的持久化存储和读取,是对数据库表的映射
所在层:主要在 DAO 层(数据访问层)使用,DAO 层通过操作 Entity 对象来与数据库进行交互,执行数据的插入、查询、更新和删除等操作。比如在一个使用 Hibernate 框架的项目中,UserEntity 类对应数据库中的用户表,DAO 层的方法会接收 UserEntity 对象作为参数,将其持久化到数据库中或者从数据库中查询出 UserEntity 对象并返回给 Service 层
六、DO(Domain Object,领域对象)
使用场景:从业务领域的角度对业务概念进行抽象和建模,既包含数据属性也可能包含相关的简单业务逻辑,它更侧重于对业务领域的描述,比 Entity 的概念更宽泛
所在层:一般在 Service 层和 DAO 层都会涉及到。在 Service 层,DO 用于执行业务逻辑操作和业务规则的处理,在与 DAO 层交互时,可能需要将 DO 转换为 Entity 对象以便进行数据的持久化操作,从 DAO 层获取到 Entity 对象后也可能需要转换为 DO 对象以便在 Service 层继续进行业务处理。例如在一个物流管理系统的运输业务中,TransportDO 在 Service 层用于计算运输费用、安排运输路线等业务逻辑处理,在与 DAO 层交互时,会将 TransportDO 转换为对应的 TransportEntity 对象进行数据的存储和读取