首先这些对象都应用都是一些单词的简称,也是一种应用思想,故其他语言也可以使用,在 Java 里比较常见这些对象吧。下面来一一解释。
一、POJO(Plain Ordinary Java Object),简单无规则java对象
简单而言,就是一个简单的对象,而且没有任何规则约束。有的时候拿 POJO 来泛指用来做传输对象Java bean (包括今天要介绍的 DTO 、 VO 、 BO 、 PO 等)也是可以的。
二、DAO(Data Access Object),数据访问对象
通常是和数据层打交道的最后一层,通过 DAO 对数据库做识别操作,最终返回我们想要的数据。通常和我们的 PO 、 BO 等基础类型,如List 、Map 等结合使用。
三、DTO(Data Transfer Object),数据传输对象
单纯用来数据传输的对象。我们有的项目又分InDto 和OutDto ,顾名思义就是输入和输出的 Dto 。
主要用于远程调用等需要大量传输对象的地方。
比如我们一张表有100个字段,那么对应的PO就有100个属性。
但是我们界面上只要显示10个字段,
客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,
这时我们就可以用只有这10个属性的DTO来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO
四、PO(Persistant Object)持久对象
在o/r 映射的时候出现的概念,如果没有o/r映射,就没有这个概念存在了。通常对应数据模型(数据库),本身还有部分业务逻辑的处理,可以看成是与数据库中的表相映射的java对象。
最简单的 PO 就是对应数据库中某个表中的一条记录,多个记录可以用 PO 的集合。 PO 不包含业务逻辑和数据逻辑。就是一个Entity 或者说ModelEntity 。
PO中应该不包含任何对数据库的操作。
五、BO(Business Object),业务对象
我经常使用的一个,它是和业务挂钩的,简单来说,我们每个业务可能需要很多 PO (数据库表)来组成,而我们返回前端页面或者返回给调用方的时候,我们需要组合。而这个时候, BO 就派上用场了,它就是一个对 PO 的组合,也可以就是 PO ,只是出发点是满足业务的传输对象。可以组合PO、VO。
六、VO(Value Object),值对象
其实和 BO 、 DTO 、 PO 差不多,只是更形象化了, VO 更简单,没有任何思想,就是一个传输对象。