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

随着业务的扩张,代码量不断增加,编程规范也随之越来越严格,规范中的很多的概念也蜂拥而至。

我们在web开发中,总会遇到VO,BO,PO,DO,DTO, 在阿里巴巴的《java 开发规范》中,看到了关于这几个对象的定义,也在网上查到了更多的各种解析xxO, 解释也都差不多,但是其实都是自己的理解。想查下有没有权威的定义,暂时也没有发现。我个人认为这个只是个开发规范,所以可能会有各种不通版本,只要我们团队内部或者小群体内可以对此有统一的理解,就没有问题了。也无需过度纠结。下面我也把自己对各个的理解写一下

1.  简介

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

VO(Value Object)值对象

PO(Persistant Object)持久对象

BO(Business Object)业务对象

DO (Data Object) 数据对象

Query-数据查询对象

2. 详细解释

名称 使用场景
DTO-数据传输对象 数据传输对象,Service或Manager向外传输的对象。
VO-值对象 通常是Web向模板渲染引擎层传输的对象。简而言之是后端传给前端的,用于渲染页面的对象。
PO-持久对象 与数据库表结构一一对应,数据库对应的实体类
BO-业务对象 由Service层输出的封装业务逻辑的对象。
DO-数据对象 与数据库表结构一一对应,数据库对应的实体类
Query-数据查询对象 数据查询对象,各层接收上层的查询请求。 

DTO:Data Transfer Object,数据传输对象

  1. 在微服务中,各服务之间可以通过DTO进行数据传输;
  2. DTO只是简单的数据传输,没有业务逻辑的处理;

VO - 对应页面显示(web页面/移动端H5/Native视图)的数据对象

BO : 主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。

  1. 在领域模型中,BO是个非常重要的概念, BO是最小的业务单元。一般是多个PO的组合;
  2. BO 包含数据对象(PO/DO)以及对数据的操作。

3. 总结

由于阿里巴巴的规范被广泛流传,很多人被规范中的 manger,vo,query 搞得晕头转向。我们在用的时候是必须按这个来做吗?当然不是的,系统和系统的复杂度不同,协作水平不同,完全没有必要教条主义。概念是给人用的,多人协作的时候一定要保证大家的概念一致。

我一般来说使用DTO接收前端数据,VO返回给前端用于渲染,PO/DO用于数据库对应实体类,Query用于数据查询对象。

 

截图为阿里巴巴的《java 开发规范》中对各个名字的解释

参考:

https://blog.csdn.net/weixin_38081048/article/details/126170328

阿里巴巴《java 开发规范》

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

https://blog.csdn.net/weixin_38081048/article/details/126170328

posted @ 2022-12-05 16:14  小log  阅读(448)  评论(0编辑  收藏  举报