最近在写代码的时候,对于Entity、VO、DTO、BO的概念有些混淆,不太了解具体的用途以及作用,所以想梳理一下。

阿里巴巴Java开发手册中的分层领域模型规约:

DO(Data Object):此对象与数据库表结构一一对应,通过 DAO层向上传输数据源对象。

DTO(Data Transfer Object):数据传输对象,Service 或Manager 向外传输的对象。

BO(Business Object):业务对象,可以由Service层输出的封装业务逻辑的对象。

Query:数据查询对象,各层接收上层的查询请求。注意超过2 个参数的查询封装,禁止使用 Map 类 来传输。

VO(View Object):显示层对象,通常是 Web 向模板渲染引擎层传输的对象。

领域模型命名规约:

1) 数据对象:xxxDO,xxx 即为数据表名。

2) 数据传输对象:xxxDTO,xxx为业务领域相关的名称。

3) 展示对象:xxxVO,xxx一般为网页名称。

4) POJO是 DO/DTO/BO/VO的统称,禁止命名成 xxxPOJO。

分包没有对错之分,下面采用的分包方式与阿里巴巴Java开发手册中定义的规范略有不同。

一、Entity

数据对象 XxxxEntity

用法:

  • 以 Entity 为结尾(阿里是以 DO 为结尾)

  • Xxxx 与数据库表名保持一致

  • 类中字段要与数据库字段保持一致,不能缺失或者多余

  • 类中的每个字段添加注释,并与数据库注释保持一致

  • 不允许有组合

二、VO(View Object)

视图对象 XxxxVO,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。

用法:

  • 不可继承自 Entity

  • VO 可以继承、组合其他 DTO,VO,BO 等对象

  • VO 只能用于返回前端、rpc 的业务数据封装对象

三、DTO(Data Transfer Object)

这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载。

传输对象 XxxxDTO,是一种设计模式之间传输数据的软件应用系统。数据传输目标往往是数据访问对象从数据库中检索数据。数据传输对象与数据交互对象或数据访问对象之间的差异是一个以不具有任何行为除了存储和检索的数据(访问和存取器)。

简单来说,我们不需要把整个PO对象的全部字段传输到客户端,而是可以用DTO重新封装,传递到客户端。此时,如果这个对象用来对应界面的展现,就叫VO。

用法:

  • 不可以继承自 Entity

  • DTO 可以继承、组合其他 DTO,VO,BO 等对象

  • DTO 只能用于前端、RPC 的请求参数

四、BO(Business Object)

业务对象 BO,可以包括一个或多个其它的对象。

例如:学生的综合情况,需要学生的基本信息、成绩等。

用法:

  • 不可以继承自 Entity

  • BO 对象不得用于 controller 层

Java学习笔记——实体类(ENTITY,VO,DTO,BO)相关推荐

  1. Java中的实体类(VO、PO、DO、DTO、BO、QO、DAO、POJO)

    Java中的实体类(VO.PO.DO.DTO.BO.QO.DAO.POJO) PO(persistant object) 持久对象 DO(Domain Object)领域对象 TO(Transfer ...

  2. JAVA学习笔记(类的学习)

    JAVA学习笔记(类的学习) 类声明和类体 构造方法和对象创建 对象的引用和实体 成员变量 方法 方法重载 关键字this 包 import语句 访问权限 对象数组 反编译和文档生成器 JAR文件 1 ...

  3. Java学习笔记1——类和对象

    面向对象 对象:万物皆对象 面向对象 类:模子,属性+方法,类是对象的类型,是具有相同属性和方法的一组对象的集合 对象属性:对象拥有的各种特征,"对象有什么" 对象方法:对象执行的 ...

  4. Java学习笔记——Calendar类

    Java中的日期类主要包括:Date类和Calendar类,本文中将对Calendar类进行讲解. 一.Calendar类的简介 Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,只需 ...

  5. Java学习笔记_类和对象

    ·类:是一组相关属性和行为的集合,可以看成是一类事务的模板,使用事物的属性特征和行为特征来描述该类事物. ·属性:该事物的状态信息 ·行为:就是该事物能够做什么 ·对象:一类事物的具体体现,对象是类的 ...

  6. Head First Java学习笔记(2):类与对象

    类 1.类是定义同一类所有对象的变量和方法的蓝图或原型. 2.实例变量的值由类的每个实例提供.当创建类的实例时,就创建了这种类型的一个对象,然后系统为类定义的实例变量分配内存.然后可以调用对象的实例方 ...

  7. Java学习笔记——Number类

    目录 ​ 一.xxxValue() 二.compareTo() 三.equals() 四.valueOf() 五.toString() 六.parsexxx() 七.代码 Java中的抽象类Numbe ...

  8. Java学习笔记----File类与IO流

    第五章:File类与IO流 第一节:File类 1.1 概述 java.io.File类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作 Java把电脑中的文件和文件夹(目录) ...

  9. Java学习笔记——Scanner类

    目录 一.Scanner类的简介 二.Scanner类的常用方法 (一)nextxxx() (二)hasNextxxx() 三.代码 一.Scanner类的简介 Scanner类主要用于扫描用户从控制 ...

最新文章

  1. windows安装MongoDB环境以及在pycharm中配置可视化插件
  2. 138.ssm 框架下 导出Excel
  3. python向字典中添加值
  4. OpenGL Vertex Array
  5. c++ doxygen 注释规范_C语言代码注释参考
  6. git 常用别名设置
  7. iOS 高效 Mac 配置
  8. django-session对象的方法
  9. 【英语学习】【English L06】U05 Appointments L6 The experience of booking or canceling
  10. vue中的自定义分页插件组件
  11. phpserialize ,PHP 中变量序列化和反序列化在 Python 中的实现
  12. php制作闹钟,简易闹钟 - 按键精灵资源站 按键精灵教程,学习脚本制作,脚本大全,视频教程...
  13. ElacticSearch索引,文档,记录,常用指令
  14. ROS之velodyne
  15. 抖音seo源码,抖音短视频SEO,SEO系统源码搭建
  16. Android 11.0 12.0在系统app安装第三方app弹出 解析安装包出现问题 的解决方案
  17. 机器学习模型管理平台_如何管理机器学习模型
  18. SSL数字证书认证的过程
  19. 美股网络券商史考特证券被黑 460万客户受影响
  20. 【操作系统】虚拟内存

热门文章

  1. Python“鉴黄”小程序,自动识别检测物体的颜色
  2. 不良资产处置(五):不同国家不良资产处置案例分析
  3. Linux用户进程高精度定时器去抖动
  4. Android Edittext输入限制一位小数2位小数(n位)小数简单通用实现
  5. js实现3d标签云tag动画效果js特效代码
  6. 两个阵营互打的回合制游戏
  7. 百度小程序服务器出错,百度智能小程序错误码解读
  8. 为什么计算机屏幕分辨率会,为什么我台电脑的屏幕分辨率经常变
  9. 如何用 Markdown 写一份简历
  10. 水滴数据建设实践及思考:2大关键问题,4大破局措施