DTO、VO、BO、PO、DO 的用法区别,居然这么多人搞不清楚.....
1、什么是 DTO、VO、BO、PO、DO、POJO
POJO 的定义是无规则简单的对象,在日常的代码分层中 pojo 会被分为 VO、BO、 PO、 DTO。通过各层 POJO 的使用,有助于提高代码的可读性和可维护性。
概念看似简单,但是想区分好或者理解好也不容易,本文简单梳理一下。
DTO(Data Transfer Object)数据传输对象
在服务间的调用中,传输的数据对象
个人理解,DTO 是可以存在于各层服务中(接口、服务、数据库等等)服务间的交互使用 DTO 来解耦
VO (view object/value object)表示层对象
前端展示的数据,在接口数据返回给前端的时候需要转成 VO
使用场景,在接口层服务中,将 DTO 转成 VO,返回给前台
B0(bussines object)业务层对象
主要在服务内部使用的业务对象
主要在服务内部使用的业务对象
使用场景,在服务层服务中,由 DTO 转成 BO 然后进行业务处理后,转成 DTO 返回到接口层
PO(persistent object)持久对象
出现位置为数据库数据,用来存储数据库提取的数据
只存储数据,不包含数据操作
使用场景,在数据库层中,获取的数据库数据存储到 PO 中,然后转为 DTO 返回到服务层中
DO(domain object)领域实体对象
DO 现在主要有两个版本:
①阿里巴巴的开发手册中的定义,DO( Data Object)这个等同于上面的 PO
②DDD(Domain-Driven Design)领域驱动设计中,DO(Domain Object)这个等同于上面的 BO
2、区别
《阿里巴巴 Java 开发规范》关于领域模型的部分介绍如下:
分层领域模型规约:
DO(Data Object):此对象与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。
DTO(Data Transfer Object):数据传输对象,Service 或 Manager 向外传输的对象。
BO(Business Object):业务对象,由 Service 层输出的封装业务逻辑的对象。
AO(ApplicationObject):应用对象,在 Web 层与 Service 层之间抽象的复用对象模型, 极为贴近展示层,复用度不高。
VO(View Object):显示层对象,通常是 Web 向模板渲染引擎层传输的对象。
Query:数据查询对象,各层接收上层的查询请求。注意超过 2 个参数的查询封装,禁止使用 Map 类来传输。
最难理解的是 BO,大致这么理解:
BO 这个对象可以包括一个或多个其它的对象。
比如一个简历,有教育经历、工作经历、社会关系等等。
我们可以把教育经历对应一个 PO,工作经历对应一个 PO,社会关系对应一个 PO。
建立一个对应简历的 BO 对象处理简历,每个 BO 包含这些 PO。这样处理业务逻辑时,我们就可以针对 BO 去处理。
3、示例代码
Controller 层
此层常见的转换为:DTO 转 VO,将 Services 层传过来的 DTO 转换成 VO 表示数据返回给前端
Service 层、Manager 层
此层常见的转换为:DO 转 BO、BO 转 DTO
然后在 Service 内部使用 UserBO 封装中间所需的逻辑对象
DAO 层
此层常见的转换为:DTO 转换为 DO,与数据库进行交互
领域模型定义
Entity 表结构实体,对应 DO
BO 业务实体
VO 视图实体,DTO 可共用
入参封装
xxxParam
Query xxx Param
Save xxx Param
Edit xxx Param
Remove xxx Param
4、IDEA 插件完成转换
1、插件名称:Simple Object Copy
这个插件是收费的,好像是 6 元(人民币)每年,当然学生、教育机构、公益免费。
可以试用 30 天,好用不好用试试才知道,先来体验一下吧!
2、安装
安装就不多说了,直接在 idea 的 Plugins 应用商店搜索插件名就出来了,然后下载安装就好,安装好后会让重启 idea,那就重启呗,重启后选择 30 天的试用。
3、如何使用
定义方法出入参,出入参就是要转换的实体
光标定位方法内,使用快捷键ALT+INSERT(WIN)
、 command + N(mac)
,或者右键鼠标选择 Generate,弹出生成选项框后,选择 genCopyMethod,代码就生成好了
结果是这样的:
复杂对象转化展示:
5、结语
通过插件的使用
1、可以节省一个个字段的设置的开发时间
2、避免了漏字段设置,ps:前端同学总是来问为啥字段总是 null。
3、而且通过出入参的设计思想去开发,规范了代码,在有特殊请求转化的时候也比较方便。
作者:清如许
来源:macwx.blog.csdn.net/article/details/122618986
评论