DTO(Data Transfer Object)数据传输对象
这个传输通常指的前后端之间的传输
1.在前端的时候:
存在形式通常是js里面的对象(也可以简单理解成json),也就是通过ajax请求的那个数据体
2.在后端的时候:
存在形式是java对象,也就是在controller里面定义的,通常在后端不需要关心怎么从json转成java对象的,这个都是由一些成熟的框架转化了,比如spring框架
这也是图片里它可以两层都占的原因。
DTO本身的一个隐含的意义是要能够完整的表达一个业务模块的输出,通常用于不同服务或服务不同分层之间的数据传输。如果两个服务不能互相独立那么之间传输的数据就不能叫DTO。
VO(View Object)表现对象
VO主要的存在形式就是js里面的对象(也可以简单理解成json),VO就是前端展示用的数据
PO(Persistant Object)持久对象
简单说PO就是数据库中的记录,一个PO的数据结构对应着库中表的结构,表中的一条记录就是一个PO对象。表示数据库中的一条记录映射成的 java 对象。PO 仅仅用于表示数据,没有任何数据操作。
BO(Business Object)业务对象
BO就是PO的组合,对多个PO对象的封装,形成一个业务逻辑。BO 包括了业务逻辑,常常封装了对 DAO、RPC 等的调用(因此除了setter和getter外还有自己的调用方法),可以进行 PO 与 VO/DTO 之间的转换。通常位于业务层,是被上层的服务层调用的。
比如PO1是交易记录,PO2是登录记录,PO3是商品浏览记录。那么BO就是人网站行为对象。除了外
AO( Application Object)应用对象
在Web层与Service层之间抽象的复用对象模型,极为贴近展示层,复用度不高。
POJO(Plain ordinary java object) 简单java对象
一个POJO持久化以后就是PO;直接用它传递、传递过程中就是DTO;直接用来对应表示层就是VO。
DO( Data Object)领域对象
通过DAO层向上传输数据源对象,就是从现实世界中抽象出来的有形或无形的业务实体。一般和数据中的表结构对应
DTO和VO区别
通常情况下字段基本一致,但DTO更多是VO(一个实体类如User类)的一个拓展和补充,也可以是VO是实体类(User类)的拓展(在代码业务开发的时候)。当一张表有20个字段,即PO有20个属性。但页面展示我们只需要5个字段。客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,这时我们就可以用只有这5个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO.
参考文章
一篇文章讲清楚VO,BO,PO,DO,DTO的区别 - 知乎 (zhihu.com)