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

最近在写代码的时候,对于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,java)