目录
DTO (data transfer object) 数据传输对象
pojo( plain ordinary java object)简单无规则java对象
先看业务图,了解一下
- 用户提交请求(可能是填写表单),表单的数据在展示层被匹配为 VO。
- 服务层把 VO 转换为服务层对应方法所要求的 DTO,传送给服务层。
- 服务层首先根据 DTO 的数据构造一个 DO (或重建),调用 DO 的业务方法完成具体业务。
- 服务层把 DO 转换为持久层对应的 PO(一般使用 ORM 工具),调用持久层的持久化方法,把 PO 传递给它,完成持久化操作。
对于一个逆向操作,如读取数据,也是用类似的方式转换和传递。
VO (View object) 视图对象
VO就是展示用的数据,不管展示方式是网页,还是客户端,还是APP,只要是这个东西是让人看到的,这就叫VO, VO主要的存在形式就是js里面的对象(也可以简单理解成json)
DTO (data transfer object) 数据传输对象
dto一般是一个业务流程后产生的数据对象,返回给业务调用方,在多团队协作中,团队之间用微服务相互调用,这个时候接口返回给别的团队java接口的数据对象就是dto,而给http前端用的对象是vo。
VO和DTO的区别
主要有两个区别:
一个是字段不一样,VO根据需要会删减一些字段
另一个是值不一样,VO会根据需要对DTO中的值进行展示业务的解释
举个简单的例子 DTO可能是这样的
{
"gender":"1",
"age":35
}
对于业务一来说只需要性别,而且因为是一个古风聊天室,也不能直接展示1,因此经过业务解释业务一的VO是
{
"gender":"男"
}
PO(persistent object)持久对象
代表持久层对象的意思,对应数据库中表的字段,数据库表中的记录在java对象中的显示状态,最形象的理解就是一个PO就是数据库中的一条记录。
Entity 实体类
常用实体类,基本和数据表一一对应,一个实体一张表。
通常PO里面除了get,set之外没有别的方法
对于PO来说,数量是相对固定的,一定不会超过数据库表的数量,等同于Entity,这俩概念是一致的。
BO(Business Object) 业务对象
BO就是PO的组合,简单的例子比如说PO是一条交易记录,BO是一个人全部的交易记录集合对象。
复杂点儿的例子PO1是交易记录,PO2是登录记录,PO3是商品浏览记录,PO4是添加购物车记录,PO5是搜索记录,BO是个人网站行为对象。
DO (Domain Object) 领域对象
DO(Domain Object)这个等同于上面的BO
pojo( plain ordinary java object)简单无规则java对象
纯的传统意义的java对象,最基本的Java Bean只有属性加上属性的get和set方法。
可以转化为PO、DTO、VO;比如POJO在传输过程中就是DTO。
系统和系统的复杂度不同,协作水平不同,完全没有必要教条主义,这些概念全上
上哪些概念,省哪些,我给一些实际建议
1,PO这个没法省,不管叫PO还是Entity,怎么着都得有
2,一些工具类的系统和一些业务不是很复杂的系统DTO是可以和BO合并成一个,当业务扩展的时候注意拆分就行
3,VO是可以第一个优化掉的,展示业务不复杂的可以压根儿不要,直接用DTO