VO
VO,即 View Object(视图对象)或 Value Object(值对象) ,主要用于对应界面显示的数据对象。其作用在于只封装前端所需的数据,这样既能有效减少数据传输量,又能防止数据结构向外泄露。
DTO
DTO(Data Transfer Object),也就是数据传输对象,其概念源自 J2EE 设计模式。最初是为 EJB 分布式应用提供粗粒度的数据实体,以此减少分布式调用的次数,从而提升分布式调用的性能,降低网络负载。DTO 常用于不同服务之间,或者服务的不同分层之间的数据传输。它与 VO 概念相近,字段通常也基本一致,但在设计理念上存在差异。例如,在 API 服务调用中,DTO 和 VO 就可能有所不同。
DAO
DAO(Data Access Object),即数据访问对象,与其他几种 “O” 有着显著区别。它主要用于封装对数据库的访问操作,一般应用于持久层,能够将数据库操作完全封装起来。
PO
PO(Persistent Object)指持久化对象,用于将数据库中的一条记录映射为 Java 对象。它与持久层(通常是关系型数据库)的数据结构形成一一对应的映射关系。若持久层为关系型数据库,那么数据表中的每个字段(或多个字段)就会对应 PO 的一个(或多个)属性。可以将一个 PO 看作是数据库表中的一条记录,它是某个事务依赖的原始数据,并且能方便地转化为其他对象。在实际应用中,
DAO 与 PO 通常搭配使用,PO 用于持久化,DAO 用于查询访问(ORM 层能够将字段映射为不同的 Java 实际属性)。
BO
BO(Business object)是复杂业务对象,其作用是将业务逻辑的数据封装成一个对象,简单来说,就是封装多个业务对象。一般在多次调用 DAO 查询不同表,返回关联数据(DO/PO)时,会将这些对象数据再次封装成一个 BO 对象。比如,一个求职者的信息对象,它包含简历、教育经历、工作经历、项目经历等,就可以封装成一个 BO。
DO
DO(Domain Object)即领域对象,是从现实世界中抽象出来的有形或无形的业务实体。业务层首先会依据 DTO 的数据构造(或重建)一个 DO,然后调用 DO 的业务方法来完成具体业务。