最近在看代码的时候,对方把java使用对象分层分的很好VO,DTO,BO,QO,DO,所以这里记录一下
POJO介绍
最近在看代码的时候,对方把java使用对象分层分的很好,所以这里记录一下:
结合网上以及阿里巴巴 Java 开发手册中的分层领域模型规约:
DO(Data Object)
:此对象与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。database -> mapper -> DO(Entity)
PO (persistant object)
:持久对象,可以看成是与数据库中的表相映射的java对象。PO -> mapper -> database
DTO(Data Transfer Object)
:数据传输对象,Service 或 Manager 向外传输的对象。在Contorller层view -> DTO(Controller) -> service(DTO)
BO(Business Object)
:业务对象,可以由 Service 层输出的封装业务逻辑的对象。(有时候在service层需要一些对象来处理业务逻辑,该对象定义成什么对象的呢?也就是BO(service)
)
QO (Query Object)
:数据查询对象,各层接收上层的查询请求。注意超过 2 个参数的查询封装,禁止使用 Map 类 来传输。(service -> mapper -> sql -> database -> DO)
VO(View Object)
:显示层对象,通常是 Web 向模板渲染引擎层传输的对象。多类DO -> service (VO) -> controller -> view
领域模型命名规约:
1) 数据对象:xxxDO,xxx 即为数据表名。
2) 数据传输对象:xxxDTO,xxx 为业务领域相关的名称。
3) 展示对象:xxxVO,xxx 一般为网页名称。
4) POJO 是 DO/DTO/BO/VO 的统称,禁止命名成 xxxPOJO。
一、Entity,DO, PO
数据对象 XxxxEntity
三者在一般情况下保持一致即可
Entity和DO可看成一种,QO在多表联查的时候可能出现的多余字段,QO可以在一定程度上运行继承PO(持久化对象)。
DO在夺表联查时:需要继承PO,添加新的字段。
用法:
- 以
Entity
为结尾(阿里是以 DO 为结尾) - Xxxx 与数据库表名保持一致
- 类中字段要与数据库字段保持一致,不能缺失或者多余
- 类中的每个字段添加注释,并与数据库注释保持一致
二、VO(View Object)
视图对象 XxxxVO
,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。
用法:
- 不可继承自
Entity
VO
可以继承、组合其他DTO,VO,BO
等对象VO
只能用于返回前端、rpc 的业务数据封装对象(VO, RPCVO)
三、DTO(Data Transfer Object)
这个概念来源于 J2EE 的设计模式,原来的目的是为了 EJB 的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载。
传输对象 XxxxDTO
,是一种设计模式之间传输数据的软件应用系统。数据传输目标往往是数据访问对象从数据库中检索数据。数据传输对象与数据交互对象或数据访问对象之间的差异是一个以不具有任何行为除了存储和检索的数据(访问和存取器)。
简单来说,我们不需要把整个PO
对象的全部字段传输到客户端,而是可以用DTO
重新封装,传递到客户端。此时,如果这个对象用来对应界面的展现,就叫VO
。
用法:
- 不可以继承自
Entity
DTO
可以继承、组合其他DTO,VO,BO
等对象DTO
只能用于前端、RPC 的请求参数
四、BO(Business Object)
业务对象 BO
,可以包括一个或多个其它的对象。
例如:学生的综合情况,需要学生的基本信息、成绩等。
用法:
- 不可以继承自
Entity
BO
对象用于service
层以及其它BO中
五、QO(Query Object)
查询对象 QO
继承于DTO或者直接使用DTO。
例如:例如查询对象的名称,如果多表联查需要添加新的字段。
用法:
- 不可以继承自
Entity
参考
1 | https://xie.infoq.cn/article/bf881a59e1c4693bdc93d378c |
- 本文作者: 初心
- 本文链接: http://funzzz.fun/2021/06/16/pojo/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!