一文理解什么是DTO、VO、BO、PO、DO,并推荐一款IDEA转换插件

简介: 一文理解什么是DTO、VO、BO、PO、DO,并推荐一款IDEA转换插件

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表示数据返回给前端

public List<UserVO> getUsers(UserQuery userQuery);

Service层、Manager层

此层常见的转换为:DO转BO、BO转DTO

// 普通的service层接口,对数据处理,返回DTO对象
 List<UserDTO> getUsers(UserQuery userQuery);
 然后在Service内部使用UserBO封装中间所需的逻辑对象

DAO层

此层常见的转换为:DTO转换为DO,与数据库进行交互

List<UserDO> getUsers(UserQuery userQuery);

领域模型定义

  • 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、如何使用

  1. 定义方法出入参,出入参就是要转换的实体
  2. 光标定位方法内,使用快捷键ALT+INSERT(WIN) 、 command + N(mac) ,或者右键鼠标选择Generate,弹出生成选项框后,选择genCopyMethod,代码就生成好了
  3. 结果是这样的:

复杂对象转化展示:

5、结语

通过插件的使用

1、可以节省一个个字段的设置的开发时间

2、避免了漏字段设置,ps:前端同学总是来问为啥字段总是null。

3、而且通过出入参的设计思想去开发,规范了代码,在有特殊请求转化的时候也比较方便。

目录
相关文章
|
4月前
|
网络协议 Windows
两步带你解决IDEA 插件下载安装慢、超时、不成功问题
这篇文章提供了解决IDEA插件下载慢或超时问题的方案,通过查找国内插件节点IP地址并修改本地hosts文件来加速下载。
两步带你解决IDEA 插件下载安装慢、超时、不成功问题
|
2月前
|
Java
轻松上手Java字节码编辑:IDEA插件VisualClassBytes全方位解析
本插件VisualClassBytes可修改class字节码,包括class信息、字段信息、内部类,常量池和方法等。
170 6
|
4月前
|
Java
可直接编辑jar包的IDEA插件-JarEditor
IDEA自带的反编译插件虽可查看jar包中的class文件,但无法直接编辑。为解决此问题,作者开发了JarEditor插件,可在IDEA中直接编辑jar文件内的class及资源文件,无需解压或手动编译。点击Jar Editor可修改代码,通过Save/Compile保存并编译,Build Jar则将更改写回jar包。该插件简化了jar包编辑流程,提高了开发效率。
284 4
可直接编辑jar包的IDEA插件-JarEditor
|
27天前
|
前端开发 Java 开发者
这款免费 IDEA 插件让你开发 Spring 程序更简单
Feign-Helper 是一款支持 Spring 框架的 IDEA 免费插件,提供 URL 快速搜索、Spring Web Controller 路径一键复制及 Feign 与 Controller 接口互相导航等功能,极大提升了开发效率。
|
6月前
|
IDE 程序员 开发工具
IDEA插件-IKun Progress 坤坤成IDEA进度条了
"IKun Progress"是一款适用于JetBrains IntelliJ IDEA等IDE的插件,该插件能够将标准的进度条替换为一个有趣且独特的篮球动画,其中的角色名为坤坤(Kun Kun)。它旨在为您的IDE使用过程增添一些娱乐和轻松的氛围。 该插件让您可以在执行IDE中的任务时享受到更加视觉上吸引人的进度指示器,例如构建、运行测试或其他涉及进度条的操作。相比传统的普通进度条,您将看到坤坤在打篮球,给您的开发工作流程增添了一份乐趣。
992 0
IDEA插件-IKun Progress 坤坤成IDEA进度条了
|
6月前
|
IDE 程序员 开发工具
IDEA插件-Mario Progress Bar马里奥进度条
"Mario Progress Bar"是一款适用于JetBrains IntelliJ IDEA等IDE的插件,它基于Dmitry Batkovitch开发的Nyan Progress Bar。该插件会将进度条样式变成马里奥游戏中的角色。基本的进度条显示为带有一些砖块的马里奥形象,而不确定状态的进度条显示为一个乌龟壳。一旦安装完成,您可以在IDE的设置中找到插件的配置选项(Settings > Tools > Mario Progress Bar),在此处选择您喜欢的角色形象。
353 0
IDEA插件-Mario Progress Bar马里奥进度条
|
3月前
|
Windows
IDEA如何查看已经安装的插件并删除
【10月更文挑战第1天】这段内容主要介绍了如何在IntelliJ IDEA中查看和删除已安装的插件。可以通过软件内的插件市场查看插件列表,包括插件名称、版本号和供应商等信息;也可以通过访问插件目录查看。删除插件则建议在插件市场中进行,包括禁用和卸载步骤,手动删除插件文件夹的方法不推荐,因为可能存在配置残留等问题。
1128 11
|
3月前
|
人工智能 Java 数据库连接
IDEA开发 常用代码规范插件 常用辅助类插件
IDEA开发 常用代码规范插件 常用辅助类插件
98 0
|
5月前
|
自然语言处理 JavaScript 算法
【插件】IDEA这款插件,爱到无法自拔
本文介绍了阿里云「通义灵码」这一强大IDEA插件,它不仅能够智能生成代码、解答研发问题,还支持多种编程语言和编辑器。文章详细展示了如何安装使用该插件,并通过多个实际案例说明其在代码解释、优化、生成注释及单元测试等方面的应用,助力开发者提高效率。强烈推荐尝试!
176 1
【插件】IDEA这款插件,爱到无法自拔
|
3月前
|
IDE Java Maven
分享几个实用的IDEA插件,提高你的工作效率!
分享几个实用的IDEA插件,提高你的工作效率!
178 0