DO,DTO,VO,POJO详解

Posted no-celery

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DO,DTO,VO,POJO详解相关的知识,希望对你有一定的参考价值。

转自: 微信公众号 "Java3y"

这里说一下 Java 中的各种 O(bject)。

有哪些 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。







以上是关于DO,DTO,VO,POJO详解的主要内容,如果未能解决你的问题,请参考以下文章

PO BO VO DTO POJO DAO DO

Java中 PO VO BO DTO DAO 和 POJO 的概念及区别(图解)

PO BO VO DTO POJO DAO概念及其作用(附转换图)

DOVO BO DTO POJO PO 概念及应用

POJO, DTO, VO, JavaBean的区别

Java中几种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)