一、基本概念:
DAO:Data access object 数据库访问对象
主要用来封装对数据库的访问,通过它可以把POJO持久化为PO,用PO组装出来VO、DTO。
DTO:Data Transfer Object数据传输对象
主要用于远程调用等需要大量传输对象的地方。比如我们一张表有100个字段,那么对应的PO就有100个属性。但是我们界面上只要显示10个字段,客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端。这时我们就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO。
PO:persistent Object 持久对象
有时也称Data对象,对应数据库中的Entity,简单的可以认为一个PO对应数据库的一个条记录。
BO:Bussiness Object对象
业务对象主要作用是把业务逻辑装为一个对象,这个对象可以包括一个或多其他对象。形象描述为一个对象的形为和动作,当然也有涉及到基它对象的一些形为和动作。比如处理一个人的业务逻辑,有睡觉,吃饭,工作,上班等等形为还有可能和别人发关系的形为。这样处理业务逻辑时,我们就可以针对BO去处理。
关于BO主要有三种概念:
- 只包含业务对象的属性
- 只包含业务方法
- 两者都包含
VO:Value Object 值对象
主要体现在视图的对象,对于一个WEB页面将整个页面的属性封装成一个对象。然后用一个VO对象在控制层与视图层进行传输交换。
AO:Application Object
应用对象,在Web层与Service之间抽象的复用对象。
POJO:Plain Ordinary Java Object(POJO是一种概念或者接口,身份及作用随环境变化而变化) :
POJO有一些private的参数作为对象的属性。然后针对每个参数定义了get和set方法作为访问的接口。即POJO是一个简单的普通的Java对象,它不包含业务逻辑或持久逻辑等,但不是JavaBean、EntityBean等,不具有任何特殊角色和不继承或不实现任何其它Java框架的类或接口。POJO对象有时也被称为Data对象,大量应用于表现现实中的对象。 一个POJO持久化以后就是PO 。直接用它传递、传递过程中就是DTO,直接用来对应表示层就是VO 。
二、《阿里巴巴Java开发规范》关于领域模型的部分介绍如下:
分层领域模型规约:
-
DO(Data Object):此对象与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。
-
DTO(Data Transfer Object):数据传输对象,Service 或 Manager 向外传输的对象。
-
BO(Business Object):业务对象,由 Service 层输出的封装业务逻辑的对象。
-
AO(ApplicationObject):应用对象,在Web层与Service层之间抽象的复用对象模型, 极为贴近展示层,复用度不高。
-
VO(View Object):显示层对象,通常是 Web 向模板渲染引擎层传输的对象。
-
Query:数据查询对象,各层接收上层的查询请求。注意超过 2 个参数的查询封装,禁止
使用 Map 类来传输。
三、转换图:
四:常见的转换方法:
(1)一种是通过IDEA插件实现快速自动生成转换代码.
如Generate All setters插件,参见https://blog.youkuaiyun.com/w605283073/article/details/89163627
定义好参数和返回值,使用快捷方式可以轻松生成转换的代码。
(2)一种是通过第三方转换库来转换。
- Apache org.apache.commons.beanutils.PropertyUtils.copyProperties
- Apache org.apache.commons.beanutils.BeanUtils.copyProperties
- Spring org.springframework.beans.BeanUtils.copyProperties
- Cglib BeanCopier
- Dozer
- orika
原文链接:
https://blog.youkuaiyun.com/w605283073/article/details/89715188
https://blog.youkuaiyun.com/zl19861225/article/details/84410984