作为后端最常用的编程语言之一,Java 已经有很多年的历史了,在阿里内部,Java 也是使用最广泛的一门语言。在阿里实习的这段时间,规范一词是我感受最深的。没有规矩不成方圆,今天来说一下 Java 中的各种 O(bject)。

为什么会出现这些 O?

我们知道,这些 O 不管叫什么名字,其本质都还是对象(Object),既然本质都一样,为什么非要给他们套上各种马甲?个人认为原因有三:第一,随着编程工业化的发展,需要有一套合理的体系出现。中国人喜欢造神,外国人喜欢造概念,于是 MVC、MVP、MVVM 等编程模型就出现了,为了搭配这些编程模型的使用,需要对 Object 的功能进行划分,于是我们便看到了这些层出不穷的 Object。当然这里并没有批评这些概念的意思。其二,我认为在团队协作编码中,一个好的命名方式是可以节约很多时间成本的。就比如getItemById一眼看去就知道是通过 id 获取一个 item 对象,ItemVO一眼看去就知道是前端透出的 json 对应的对象。其三,如此划分,可以让项目结构更加清楚,不至于出现东一块西一块,对象乱扔的局面。尽可能避免了在多人协作时对象混乱的情况。总的来说,这一切都是为了让软件编程更加合理、更加规范、更加高效。

有哪些 O?

这些 O 有很多衍生出的命名,比如 VO、DO、BO,这里我们把常见的 O 列举出来,然后一一解释。

以下内容参考阿里巴巴 Java 开发手册,如果有需要可以在微信公众号「01 二进制」后台回复「Java 开发手册」获得。

•DO( Data Object):与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。•PO(Persistant Object):持久对象,一个 PO 的数据结构对应着库中表的结构,表中的一条记录就是一个 PO 对象•DTO( Data Transfer Object):数据传输对象,Service 或 Manager 向外传输的对象。•BO( Business Object):业务对象。由 Service 层输出的封装业务逻辑的对象。•AO( Application Object):应用对象。在 Web 层与 Service 层之间抽象的复用对象模型,极为贴近展示层,复用度不高。•VO( View Object):显示层对象,通常是 Web 向模板渲染引擎层传输的对象。•POJO( Plain Ordinary Java Object):POJO 专指只有 setter/getter/toString 的简单类,包括 DO/DTO/BO/VO 等。•DAO(Data Access Objects):数据访问对象,和上面那些 O 不同的是,其功能是用于进行数据操作的。通常不会用于描述数据实体。

一下子给出 8 个常见的 O,光看解释大家可能会有些迷糊,接下来我们从下面这张图入手,带大家直观的感受下,这些 O 的用处。

数据的流向

我们知道,一般情况下,前端是不会凭空造出数据的,因此最后前端展示的数据一定是从数据库中来的,数据的流向通常也是从数据库流向页面。我将其分成三个部分:数据访问、业务处理和业务解释。

1.数据访问:这一部分是用于从数据库中读取数据,将数据记录转换成数据实体也就是 Java 对象,便于操作。2.业务处理:这一部分是数据流的核心,几乎所有数据的操作都是在这一部分完成的。3.业务解释:这一部分是用于展示给前端的数据,解释业务体现在某些字段/值是需要经过处理的才会呈现的。

关键点

说了这么多,我们整理出以下关键点。

•DAO,是用于操作数据而不是描述数据的。•PO/DO/Entity,其数据结构对应数据表中的一条记录,因此是同一类别的。•BO,可以理解为 PO 的组合,举个简单的例子,假设 PO 是一条交易记录,BO 就可以是一个人全部的交易记录集合对象。•DTO,用于传输数据,可能传递给前端,也有可能传递给其他系统。用于承载数据。•VO,这个最好理解,前端最后需要的数据长什么样,对应的对象就是 VO。

如何使用这些 O?

说了这么多,在实际的项目中,我们应该如何去使用这些 O?

教条主义?

首先,这几个概念很完整,但是我们在用的时候是必须按这个来做吗?答案当然不是的,规矩是死的,人是活的。文章开头我们就说了,之所以引入这些概念,很大程度上是为了提升编程体验,而且系统和系统的复杂度不同,协作水平不同,完全没有必要教条主义,适合自己的才是最好的。

省略方案

1.不管你是叫 PO 还是 DO 还是 Entity,用于描述数据库记录的对象一定要存在,不可省略。2.DTO 和 BO 在一般情况下,如果业务系统不是非常复杂,可以考虑省略。3.VO 和 DTO,DTO 可以用于将数据传递给前端,如果你不需要删减字段的话,VO 可以考虑省略。

注意事项

领域模型命名规约:

•数据对象:xxxDO,xxx 即为数据表名。•数据传输对象:xxxDTO,xxx 为业务领域相关的名称。•展示对象:xxxVO,xxx 一般为网页名称。•POJO 是 DO/DTO/BO/VO 的统称,禁止命名成 xxxPOJO。

最后

以上就是本篇文章的全部内容了,如果你觉得本篇文章对你有所帮助,不妨关注支持一下。

dto是什么意思_DO,DTO,VO,POJO 你知道吗?相关推荐

  1. 领域模型命名规约【PO,VO,POJO,BO,DTO,DO,JavaBean】

    PO,VO,POJO,BO,DTO,DO,JavaBean 在这之前我先说一下,在阿里巴巴开发手册中有提到这种领域模型命名规约,即如下图: 下面是更加详细的介绍: po PO(Persistant O ...

  2. DO、DTO、BO、AO、VO、POJO

    介绍 阿里巴巴 Java 开发手册中的定义如下: 「分层领域模型」规约: DO( Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象. DTO( Data Transfe ...

  3. 定义一个dto对象_正确理解DTO、值对象和POCO

    (此文章同时发表在本人微信公众号"dotNET每日精华文章") 今天推荐的文章比较技术化也比较简单,但是对于一些初学者而言,可能也是容易搞混的概念:就是如何理解DTO.值对象和PO ...

  4. java dto是什么_java中DTO与DAO的问题

    上下文 您正在设计一个分布式应用程序,为了满足单个客户端请求,您发现自己对一个远程接口发出了多个调用,而这些调用所增加的响应时间超出了可接受的程度. 问题 如何保留过程调用接口的简单语义,而不受远程通 ...

  5. java dto 实例_Spring Boot DTO示例:实体到DTO的转换

    在本教程中,我们将学习如何在Spring Boot应用程序中创建DTO(数据传输对象)类,以及如何使用ModelMapper库将实体转换为DTO,反之亦然. 数据传输对象设计模式是一种经常使用的设计模 ...

  6. bo dto java vo_java中PO、VO、BO、POJO、DAO、DTO、TO、QO、Bean、conn的理解

    O/R Mapping 是 Object Relational Mapping (对象关系映射)的缩写.通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据.在 O/R Mapping 的世界里 ...

  7. spring vo是什么_DO、VO、DTO...XXOO,你弄明白了么

    技术公众号:Java In Mind(Java_In_Mind),欢迎关注! 背景 我相信,刚开始学习接触企业代码的时候,一定会发现,工程中充斥着各种XO:DO.VO.DTO.DAO,还有各种名词:P ...

  8. 阿里巴巴Java开发手册中的DO、DTO、BO、AO、VO、POJO定义

    分层领域模型规约: DO( Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象. DTO( Data Transfer Object):数据传输对象,Service或Ma ...

  9. JAVA vo pojo javabean dto区别

    JavaBean 是一种JAVA语言写成的可重用组件.为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器.JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性 ...

最新文章

  1. CSS背景不透明度[重复]
  2. Java Web之POI操作Excel2016模板
  3. 安卓手机如何解压缩文件
  4. VMLite 安装linux系统,VMlite安装XPMode及xp、win7、linux的虚拟磁盘到D盘的方法(15页)-原创力文档...
  5. TokenInsight:反映区块链行业整体表现的TI指数较昨日同期下跌1.33%
  6. QPushButton 与 QListWidget 的按键响应
  7. 【Python实例第4讲】填补缺失值
  8. Redis 基本命令、键(key)命令、基本数据类型(命令行操作)
  9. linux软件索引损坏,linux – 突然大量文件系统损坏的原因? (“root inode不是目录”)...
  10. 国产数据库激荡 40 年
  11. 万能显卡驱动win7_驱动工具更新!完美支持苹果电脑驱动
  12. mac开发php集成环境
  13. Java宠物商店源代码
  14. apache 服务器的 Option Indexes,AllowOverride,Order Allow,Deny 详解
  15. 解决MySQL数据库登录报错原因以及修改MySQL数据库登录密码;
  16. [Office] Excel 每行插入空白行 / 隔行插入一行/ 每列插入空白列 / 每隔两行插入一行 / 批量插入空白行
  17. PC微信更改文件默认保存位置后聊天记录丢失
  18. JDK8 ThreadLocal 源码解析与最佳实践
  19. 【python】tkinter界面化+百度API—聊天机器人(四)
  20. 一首歌曲,没有寻找到试听资源

热门文章

  1. 程序员为什么会有职业瓶颈?
  2. 学习Redis持久化
  3. Python包管理工具pip安装
  4. 10 Windows编程——鼠标消息
  5. Elasticsearch本地 docker-compose 安装
  6. Linux常用命令--echo
  7. Java中isAssignableFrom的用法
  8. PostgreSQL on XFS 性能优化 - 1
  9. nginx location 配置详细解释
  10. 在 Delphi 下使用 DirectSound (12): 测试失真效果器 IDirectSoundFXDistortion8