DO,DTO,VO,POJO 你知道吗?

DO_DTO_VO_POJO 做为后端最经常使用的编程语言之一,Java 已经有不少年的历史了,在阿里内部,Java 也是使用最普遍的一门语言。在阿里实习的这段时间,规范一词是我感觉最深的。没有规矩不成方圆,今天来讲一下 Java 中的各类 O(bject)。前端

为何会出现这些 O?

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

有哪些 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 的用处。json

数据的流向

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

  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。

最后

以上就是本篇文章的所有内容了,若是你以为本篇文章对你有所帮助,不妨关注支持一下。

本文使用 mdnice 排版

相关文章
相关标签/搜索