美文网首页java
一篇文章讲清楚VO,BO,PO,DO,DTO的区别

一篇文章讲清楚VO,BO,PO,DO,DTO的区别

作者: jackcooper | 来源:发表于2021-08-10 18:04 被阅读0次
    image.png

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

    DTO是一个比较特殊的对象,他有两种存在形式:

    • 在后端,他的存在形式是java对象,也就是在controller里面定义的那个东东,通常在后端不需要关心怎么从json转成java对象的,这个都是由一些成熟的框架帮你完成啦,比如spring框架

    • 在前端,他的存在形式通常是js里面的对象(也可以简单理解成json),也就是通过ajax请求的那个数据体

    VO(Value Object)值对象

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

    VO和DTO的区别
    主要有两个区别
    一个是字段不一样,VO根据需要会删减一些字段
    另一个是值不一样,VO会根据需要对DTO中的值进行展示业务的解释

    PO(Persistant Object)持久对象

    PO比较好理解
    简单说PO就是数据库中的记录,一个PO的数据结构对应着库中表的结构,表中的一条记录就是一个PO对象
    通常PO里面除了get,set之外没有别的方法
    对于PO来说,数量是相对固定的,一定不会超过数据库表的数量
    等同于Entity,这俩概念是一致的

    BO(Business Object)业务对象

    BO就是PO的组合
    简单的例子比如说PO是一条交易记录,BO是一个人全部的交易记录集合对象
    复杂点儿的例子PO1是交易记录,PO2是登录记录,PO3是商品浏览记录,PO4是添加购物车记录,PO5是搜索记录,BO是个人网站行为对象
    BO是一个业务对象,一类业务就会对应一个BO,数量上没有限制,而且BO会有很多业务操作,也就是说除了get,set方法以外,BO会有很多针对自身数据进行计算的方法
    为什么BO也画成横跨两层呢?原因是现在很多持久层框架自身就提供了数据组合的功能,因此BO有可能是在业务层由业务来拼装PO而成,也有可能是在数据库访问层由框架直接生成
    很多情况下为了追求查询的效率,框架跳过PO直接生成BO的情况非常普遍,PO只是用来增删改使用

    BO和DTO的区别
    这两个的区别主要是就是字段的删减
    BO对内,为了进行业务计算需要辅助数据,或者是一个业务有多个对外的接口,BO可能会含有很多接口对外所不需要的数据,因此DTO需要在BO的基础上,只要自己需要的数据,然后对外提供
    在这个关系上,通常不会有数据内容的变化,内容变化要么在BO内部业务计算的时候完成,要么在解释VO的时候完成

    DO呢,标题不是还有个DO么?

    上面这些概念基本上已经涵盖了全部的流程,DO只是跟其中一个概念相同
    但是跟哪个概念相同呢?
    现在主要有两个版本
    一个是阿里巴巴的开发手册中的定义
    DO( Data Object)这个等同于上面的PO
    另一个是在DDD(Domain-Driven Design)领域驱动设计中
    DO(Domain Object)这个等同于上面的BO


    摘自: https://zhuanlan.zhihu.com/p/102389552

    相关文章

      网友评论

        本文标题:一篇文章讲清楚VO,BO,PO,DO,DTO的区别

        本文链接:https://www.haomeiwen.com/subject/kfrfbltx.html