概念扫盲:Java中的几种对象
POJO
(1) 含义
- plain old/oldinary java object
- 简单无规则的java对象
(2) 解释
- 不包含业务逻辑,能够控制自己内部
- 那些没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的java对象
(3) 包含
- VO、PO…
(4) 意义
- POJO让开发者可专注于业务逻辑和脱离框架的单元测试。
- 除此之外, 由于POJO并不须要继承框架的类或实现其接口,开发者能够极其灵活地搭建继承结构和建造应用。
- POJO的意义就在于它的简单而灵活性,因为它的简单和灵活,使得POJO能够任意扩展,从而胜任多个场合,也就让一个模型贯穿多个层成为现实。
- 先写一个核心POJO,然后实现业务逻辑接口和持久化接口,就成了Domain Model; UI需要使用时,就实现数据绑定接口,变成VO(View Object)。
(5) 扩展
- POJO仅包含最简单的字段属性,没有多余的东西,它本质上就是一个普通的JavaBean。
- 但是在POJO的基础上,能够扩展出不同的对象。
- 为POJO增加了持久化的方法(Insert、Update、Delete……)之后,POJO就变成了PO。
- 为POJO增加了数据绑定功能之后,POJO就变成了View Object,即UI Model。
- 为POJO增加业务逻辑的方法(比如单据审核、转帐……)之后,POJO就变成了Domain Model。
- POJO还可以当作DTO使用。
Java Beans
(1) 含义
- JavaBeans 是 Java 中一种特殊的类,可以将多个对象封装到一个对象(bean)中。
- 特点是可序列化,提供无参构造器,提供 getter 方法和 setter 方法访问对象的属性。
- 名称中的“Bean”是用于Java的可重用软件组件的惯用叫法。
(2) 解释
- JavaBean是一种 Java 写成的可重用组件。它的方法命名,构造及行为必须符合特定的约定:
- 这个类必须有一个公共的缺省构造函数。
- 这个类的属性使用 getter 和 setter 来访问,其他方法遵从标准命名规范。
- 这个类应是可序列化的。
- JavaBean 是 Java 类,同时它也具有自己的一些特征:
- javabean 是一个 public 的类
- javabean 有一个不带参数的构造方法
- javabean 中的属性通过 getXXX() 和 setXXX() 进行操作
POJO & JavaBean
(1) 含义
- POJO 和 JavaBean 是我们常见的两个关键字,一般容易混淆。
- javabean 的要求主要是靠约定而不是靠实现接口,所以许多开发者把 javabean 看作遵从特定命名约定的POJO。
- 简而言之,当一个 pojo 可序列化,有一个无参的构造函数,使用 getter 和 setter 方法来访问属性时,它就是一个 javabean。
(2) 解释
pojo | java beans |
不需要有无参构造函数 | 必须有无参构造函数 |
属性的访问权限无限制 | private |
没有业务逻辑 | 没有业务逻辑 |
PO
(1) 含义
- persist object
- 持久化对象
(2) 解释
- 在O/R 映射 ( 即ORM–ObjectRelationMapping ) 中出现的概念,
- 通常对应数据模型(数据库),是与数据库汇总的表相映射的java对象,
- 最简单的PO就是对应数据库中某个表中的一条记录,多个记录则用PO的集合。
- PO中不应该包含任何对数据库的操作。
- 生命周期和数据库密切相关
- 在向数据库插入记录时创建该实体,删除或关闭数据库时该实体随之消亡,
- 很多优秀的开源框架都实现了将数据库中的PO通过ORM用POJO来实际操作。
VO
(1) 含义
- value object
- 值对象
(2) 解释
- Javabean中和DAO类配合使用的类
- 常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已
- 但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要
- 个人觉得同DTO(数据传输对象);在web上传递。
DO
(1) 含义
- Domain object
- 领域对象
(2) 解释
- 是从现实世界中抽象出来的有形或无形的业务实体。
TO
(1) 含义
- transfer object
- 数据传输对象
(2) 解释
- 不同应用程序之间传输的对象。
DTO
(1) 含义
- data transfer object
(2) 解释
- 泛指用于业务层之间的数据传递,和PO一样仅包含数据,
- 但是抽象出的业务对象,可以和表对应,用new 关键字创建,GC回收。
DAO
(1) 含义
- data access object
- 数据访问对象
(2) 解释
- 此对象用于访问数据库。通常和PO结合使用,DAO中包含了各种数据库的操作方法。
- 通过它的方法,结合PO对数据库进行相关的操作。
BO
(1) 含义
- business object
- 业务层对象
(2) 解释
- 封装业务逻辑的java对象,这个对象可以包含一个或多个其他对象,
- 通过调用DAO方法,结合PO、VO进行业务操作。
O/R Mapping
(1) 含义
O/R Mapping 是Object Relational Mapping(对象关系映射)的缩写。
通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据。
在O/R Mapping的世界里,有两个基本的也是重要的东东需要了解,即VO,PO。
(2) 解释
- VO 与 PO
- VO,值对象(Value Object);PO,持久对象(Persisent Object),
- 它们是由一组属性和属性的get和set方法组成。从结构上看,它们并没有什么不同的地方。但从其意义和本质上来看是完全不同的。
- VO
- VO是用new关键字创建,由GC回收的。PO则是向数据库中添加新数据时创建,删除数据库中数据时削除的。并且它只能存活在一个数据库连接中,断开连接即被销毁。
- VO是值对象,精确点讲它是业务对象,是存活在业务层的,是业务逻辑使用的,它存活的目的就是为数据提供一个生存的地方。
- VO的属性是根据当前业务的不同而不同的,也就是说,它的每一个属性都一一对应当前业务逻辑所需要的数据的名称。
- PO
- PO则是有状态的,每个属性代表其当前的状态。它是物理数据的对象表示。
使用它,可以使我们的程序与物理数据解耦,并且可以简化对象数据与物理数据之间的转换。 - PO的属性是跟数据库表的字段一一对应的。PO对象需要实现序列化接口。