分层的目的,就是保证复用和相对稳定性!
- 开局一张图,后文全靠编
VO值对象(Value Object)
new关键字创建,由GC回收。VO是值对象,精确点来说,它是业务对象,存活在业务层,由业务逻辑使用,其存活目的就是给数据提供一个生存地。
主要对应界面显示的数据对象。对于一个WEB页面,用一个VO对象对应整个界面的值。
VO的属性是根据当前业务的不同而不同的,也就是说,它的每一个属性都一一对应当前业务逻辑所需要的数据的名称。
PO持久对象(Persisent Object)
向数据库中添加新数据时创建,删除数据库中数据时削除的。并且它只能存活在一个数据库连接中,断开连接即被销毁。
PO是有状态的,每个属性代表其当前的状态。它是物理数据的对象表示。使用它,可以使我们的程序与物理数据解耦,并简化对象数据与物理数据之间的转换。
PO的属性跟数据库表字段一一对应。
Hibernate里的实体bean就是个PO,也叫POJO。
PO对象需要实现序列化接口。
PO是持久化对象,它只是将物理数据实体的一种对象表示。
为什么需要它?因为它可以简化我们对于物理实体的了解和耦合,简单地讲,可以简化对象的数据转换为物理数据的编程。
VO是什么?它是值对象,准确地讲,它是业务对象,是生活在业务层的,是业务逻辑需要了解,需要使用的,再简单地讲,它是概念模型转换得到的。
首先说PO和VO吧,它们的关系应该是相互独立的,一个VO可以只是PO的部分,也可以是多个PO构成,同样也可以等同于一个PO(当然我是指他们的属性)。正因为这样,PO独立出来,数据持久层也就独立出来了,它不会受到任何业务的干涉。又正因为这样,业务逻辑层也独立开来,它不会受到数据持久层的影响,业务层关心的只是业务逻辑的处理,至于怎么存怎么读交给别人吧!不过,另外一点,如果我们没有使用数据持久层,或者说没有使用hibernate,那么PO和VO也可以是同一个东西,虽然这并不好。
PO(persistant object) 持久对象
在o/r映射的时候出现的概念。
通常对应数据模型(数据库),本身还有部分业务逻辑的处理。可以看成是与数据库中的表相映射的java对象。
最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。
PO中应该不包含任何对数据库的操作。
- 好处
把一条记录作为一个对象处理,方便的转为其它对象。
DTO(Data Transfer Object 数据传输对象)
常用于远程调用等传输对象的地方,作为请求或相应对象。
比如数据库表有100个字段,其PO就有100个属性,但界面上只需显示10个字段,客户端请求获取数据,没有必要传递整个PO,可以只用这10个属性的DTO传递结果响应给客户端,也不会暴露数据库表结构。到达客户端以后,如果用这个对象来对应界面显示,那时转为VO。
BO(Business Object) 业务对象
从业务模型角度看,见UML元件领域模型中的领域对象。
通过调用DAO方法,结合PO,VO进行业务操作。把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。
比如一个简历,有
- 教育经历 ======> PO
- 工作经历 ======> PO
- 社会关系 ======> PO
…
建立一个对应简历的BO对象处理简历,每个BO包含这些PO。这样处理业务逻辑时,就可以针对BO处理。
POJO(plain ordinary java object)
简单无规则java对象
纯的传统意义的java对象。就是说在一些Object/Relation Mapping工具中,能够做到维护数据库表记录的persisent object完全是一个符合Java Bean规范的纯Java对象,没有增加别的属性和方法。最基本的Java Bean,只有属性字段及setter和getter方法!
范围上看 POJO 包含了 PO。
VO(value object) 值对象
常用于业务层间数据传递,和PO一样仅包含数据。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务需要。同DTO,在web上传递。
TO(Transfer Object),数据传输对象
在应用程序不同tie(关系)之间传输的对象
DAO(data access object) 数据访问对象
是一个sun的一个标准j2ee设计模式,这个模式中有个接口就是DAO,它负持久层的操作。为业务层提供接口。此对象用于访问数据库。通常和PO结合使用,DAO中包含了各种数据库的操作方法。通过它的方法,结合PO对数据库进行相关的操作。夹在业务逻辑与数据库资源中间。配合VO, 提供数据库的CRUD操作…
POJO(Plain Ordinary Java Object 简单Java对象)
中间对象。
一个POJO持久化后就是PO。
直接用它传递、传递过程中就是DTO。
直接用来对应表示层就是VO
DAO(Data Access Object数据访问对象)
基本没有和其它O互相转化的可能性和必要性。主要用来封装对数据库的访问。通过它可以把POJO持久化为PO,用PO组装出VO、DTO。
QO 查询对象
参考
- https://www.zhihu.com/question/57236999/answer/238514905