服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

DTO、VO、BO、PO、DO的用法区别,居然这么多人搞不清楚.....

日期: 来源:Java知音收集编辑:清如许

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

定义方法出入参,出入参就是要转换的实体

光标定位方法内,使用快捷键ALT+INSERT(WIN)command + N(mac) ,或者右键鼠标选择Generate,弹出生成选项框后,选择genCopyMethod,代码就生成好了

结果是这样的:

复杂对象转化展示:

5、结语

通过插件的使用

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

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

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

作者:清如许

来源:macwx.blog.csdn.net/article/details/122618986

推荐

Java面试题宝典

技术内卷群,一起来学习!!

PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我们吧!

相关阅读

  • 如何搭建一台永久运行的个人服务器?

  • 「 关注“石杉的架构笔记”,大厂架构经验倾囊相授 」文章来源:https://segmentfault.com/a/1190000021143144目录一、 树莓派是什么?二、 树莓派zero w安装系统一、树莓派是什
  • 如何用 Jenkins+Docker 实现一键自动化部署

  • 关注我,回复关键字“spring”,免费领取Spring学习资料。来源:https://blog.csdn.net/zqqiang0307/article/details/120458586本文章实现最简单全面的Jenkins+docker+springboot
  • 阅读GitHub项目源码的最佳姿势,太舒服了!

  • 如果您跟我一样,经常上GitHub看开源项目,那么一定有这样的感觉:在线阅读代码很不方便!所以,很多时候,我们都是通过git clone方式下载下来。然后用开发工具打开就可以非常顺滑的阅
  • 余杭分局召开审计问题整改工作布置会议

  • 3月10日,在全市规资系统审计问题整改工作专题视频会议后,市规划资源局余杭分局党委书记、局长陈勇第一时间组织召开审计问题整改工作布置会议,并强调,审计整改是审计监督不可缺
  • 微赚247%,策略再创新高

  • 点击上方『西门吹雪实盘』可关注并“星标”本号。文章仅记录西门个人投资思考和交易,不构成投资建议,作者不收费荐股、不代客理财。“这是西门吹雪的第440篇原创文章”大家可
  • MyBatis框架的精华

  • 你好,我是yes。今天来看看MyBatis,在 MyBatis 的两万多行的框架源码中,使用了大量的设计模式对工程架构中的复杂场景进行解耦,这些设计模式的巧妙使用是整个框架的精华。经过整
  • 我的VIP问答服务

  • 你好,我是 yes。时间过的真快,这个专属回答服务运行两年了。提供这个一对一专属问答服务的初衷来源于我初始学编程的苦难时期。我是科班出身,但是大学呢懂得都懂,没学。到大三我

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章