VO,BO,PO,DO,DTO 区别于联系

623 阅读2分钟

1>DTO(Data Transfer Object)数据传输对象 在controller里面定义:java对象,不需要关心怎么从json转成java对象 2>VO(Value Object)值对象 VO就是展示用的数据:VO主要的存在形式就是js里面的对象 3> VO和DTO的区别
主要有两个区别
一个是字段不一样,VO根据需要会删减一些字段
另一个是值不一样,VO会根据需要对DTO中的值进行展示业务的解释

4>PO(Persistant Object)持久对象 PO就是数据库中的记录,一个PO的数据结构对应着库中表的结构,表中的一条记录就是一个PO对象. PO里面除了get,set之外没有别的方法 注意: PO来说,数量是相对固定的,一定不会超过数据库表的数量
等同于Entity

5>BO(Business Object)业务对象 BO就是PO的组合 简单的例子比如说PO是一条交易记录,BO是一个人全部的交易记录集合对象 BO会有很多针对自身数据进行计算的方法

为什么BO也画成横跨两层呢?原因是现在很多持久层框架自身就提供了数据组合的功能,因此BO有可能是在业务层由业务来拼装PO而成,也有可能是在数据库访问层由框架直接生成
很多情况下为了追求查询的效率**,框架跳过PO直接生成BO的情况非常普遍,PO只是用来增删改使用

BO和DTO的区别
这两个的区别主要是就是字段的删减,

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

DO( Data Object)这个等同于上面的PO 另一个是在DDD(Domain-Driven Design)领域驱动设计中 DO(Domain Object)这个等同于上面的BO

总结: DTO >>> BO(不是很复杂的系统DTO是可以和BO合并成一个,当业务扩展的时候注意拆分就行) >>> PO (不管叫PO还是Entity,怎么着都得有)

image.png

参考:一篇文章讲清楚VO,BO,PO,DO,DTO的区别 - 知乎 (zhihu.com)