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,数据传输对象
- 在微服务中,各服务之间可以通过DTO进行数据传输;
- DTO只是简单的数据传输,没有业务逻辑的处理;
VO - 对应页面显示(web页面/移动端H5/Native视图)的数据对象
BO : 主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。
- 在领域模型中,BO是个非常重要的概念, BO是最小的业务单元。一般是多个PO的组合;
- 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