【二三方】_VO、BO、PO、DO、DTO的区别

VO、BO、PO、DO、DTO的区别

  • 在业务中的结构图

  • DAO(Data Access Object)数据访问对象

    DAO是一个面向对象的数据库接口,负责持久层的操作,为业务层提供接口,主要用来封装对数据库的访问,就是那些操作数据库的CURD语句。

  • PO(Persistant Object)持久对象
    PO就是数据库中记录的映射,一个PO的数据结构对应着库中表的结构,表中的一条记录就是一个PO对象,通常PO里面除了get,set之外没有别的方法。PO等同于Entity,这俩概念是一致的。

  • BO(Business Object)业务对象
    BO就是不同PO的组合,比如PO1对应用户表,PO2对应角色表,那么PO1+PO2得到的BO就是用户角色与权限对象。BO会有很多业务操作,也就是说除了get,set方法以外,BO会有很多针对自身数据进行计算的方法。BO有可能是在业务层由业务来拼装PO而成;也有可能是在数据库访问层由框架直接生成,很多情况下为了追求查询的效率,框架跳过PO直接生成BO的情况非常普遍,比如多表查询sql语句得到的就是BO。

    BO和DTO的区别主要是就是字段的删减,BO对内,为了进行业务计算需要辅助数据,或者是一个业务有多个对外的接口,BO可能会含有很多接口对外所不需要的数据,因此DTO需要在BO的基础上,只要自己需要的数据,然后对外提供。

  • DTO(Data Transfer Object)数据传输对象

    主要用于远程调用等需要大量传输对象的地方,比如我们有一个交易订单表,含有 25 个字段,那么其对应的 PO 就有 25 个属性,但我们的页面上只需要显示 5 个字段,因此没有必要把整个 PO 对象传递给客户端,这时我们只需把仅有 5 个属性的 DTO 把结果传递给客户端即可,而且如果用这个对象来对应界面的显示对象,那此时它的身份就转为 VO。使用 DTO 的好处有两个,一是能避免传递过多的无用数据,提高数据的传输速度;二是能隐藏后端的表结构。常见的用法是:将请求的数据或属性组装成一个 RequestDTO,再将响应的数据或属性组装成一个 ResponseDTO。

  • VO(Value Object)值对象
    VO就是展示用的数据,不管展示方式是网页,还是客户端,还是APP,只要是这个东西是让人看到的,这就叫VO。VO主要的存在形式就是js里面的对象(也可以简单理解成json)。

  • DO( Data Object)这个等同于上面的PO。

  • POJO就是只能有get,set方法的实体类,BO、DTO、VO等满足该条件的话都可以叫POJO。