简介
在日常的开发中可能会遇到有相关的同学在讲VO、DTO、BO、PO、DAO等概念,这些到底代表着什么?下面通过详细介绍来每个概念分别是什么
数据流程
从数据的角度出发看VO、DTO、BO、PO和BAO的数据流向如下:
概念理解
VO(Value Object)
VO是用于展示的数据,渲染成用于可看到页面、小程序或app内容
DTO(Data Transfer Object)
DTO是数据传输对象。DTO有两种存在形式:
1、在后端,他的存在形式是请求的入参,也就是在controller里面定义的参数
2、在前端,他的存在形式通常是js里面的对象(也可以简单理解成json),也就是通过ajax请求的那个数据体
注:这个传输通常指的前后端之间的传输,DTO本身的一个隐含的意义是要能够完整的表达一个业务模块
的输出。如果服务和服务之间相对独立,那就可以叫DTO;如果服务和服务之间不独立,每个都不是一个完整的
业务模块,拆开可能仅仅是因为计算复杂度或者性能的问题,那这就不能够叫做DTO,只能是BO。
BO(Business Object)
BO是业务对象,一类业务就会对应一个BO,数量上没有限制。而且BO会有很多业务操作,也就是说除了PO对象的get,set方法以外,BO会有很多针对自身数据进行计算的方法。现在很多持久层框架自身就提供了数据组合的功能,因此BO有可能是在业务层由业务来拼装PO而成,也有可能是在数据库访问层由框架直接生成。很多情况下为了追求查询的效率,框架跳过PO直接生成BO的情况非常普遍,PO只是用来增删改使用。
PO(Persistant Object)
PO是数据库中的记录,一个PO的数据结构对应着库中表的结构,表中的一条记录就是一个PO对象通常PO里面除了get,set之外没有别的方法。对于PO来说,数量是相对固定的,一定不会超过数据库表的数量,等同于常说的Entity
DAO
DAO(Data Access Object) DAO是数据访问对象,它负持久层的操作。为业务层提供接口。此对象用于访问数据库。通常和 PO 结合使用, DAO 中包含了各种数据库的操作方法。通过它的方法 , 结合 PO 对数据库进行相关的操作。
相互之间区别
VO 与 DTO 的区别
VO 是在 DTO 的基础上,根据展示的业务需求进行加工。 例如 DTO 的数据如下:
{
"gender":"男",
"age":28
}
在展示的业务需求,只需要展示年龄阶段,则VO层会进行加工为如下:
{
"gender":"男",
"age":20 ~ 30
}
DTO 与 BO 的区别
BO 是对内的,是进行业务数据的计算辅助。 DTO 是在 BO 的基础上进行业务数据的加工,提供给对应的对外接口。
BO 与 PO 的区别
BO 是基于 PO 的数据记录,进行业务数据的运算
PO 与 DAO 的区别
DAO 是包含数据库增删改查等各种操作。PO 为查询的数据库记录对象