PO/VO/BO/DTO/POJO 解释

PO

Persistant Object 持久对象

最形象的理解就是一个PO就是数据库中的一条记录。
好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象。

VO

1. Value Object 值对象

2. View Object 表现层对象

主要对应界面显示的数据对象。
对于一个 WEB 页面,或者 SWT、SWING 的一个界面,用一个 VO 对象对应整个界面的值。

BO

Business Object 业务对象

主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。
比如一个简历,有教育经历、工作经历、社会关系等等。
我们可以把教育经历对应一个 PO,工作经历对应一个 PO,社会关系对应一个 PO。
建立一个对应简历的 BO 对象处理简历,每个 BO 包含这些 PO。
这样处理业务逻辑时,我们就可以针对 BO 去处理。

DTO

Data Transfer Object 数据传输对象

主要用于远程调用等需要大量传输对象的地方。
比如我们一张表有 100 个字段,那么对应的 PO 就有 100 个属性。
但是我们界面上只要显示 10 个字段,
客户端用 Web Service 来获取数据,没有必要把整个 PO 对象传递到客户端,
这时我们就可以用只有这 10 个属性的 DTO 来传递结果到客户端,这样也不会暴露服务端表结构.到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为 VO。

POJO

Plain Ordinary Java Object / Plain Old Java Object 简单 java 对象

POJO 的内在含义是指那些没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的 java 对象。

POJO 的格式用于数据的临时传递,它只能装在数据,作为数据存储的载体,而不具有业务逻辑处理的能力。

个人感觉 POJO 是最常见最多变的对象,是一个中间对象,也是我们最常打交道的对象。

一个 POJO 持久化以后就是 PO
直接用它传递、传递过程中就是 DTO
直接用来对应表示层就是 VO

而 Java Bean 虽然数据的获取与 POJO 一样,但是 Java Bean 当中可以有其它的方法。
Java Bean 是可复用的组件,对 Java Bean 并没有严格的规范,理论上讲,任何一个 Java 类都可以是一个 Bean

DAO

Data Access Object 数据访问对象

上面几个 O 区别最大,基本没有互相转化的可能性和必要。

主要用来封装对数据库的访问。
通过它可以把 POJO 持久化为 PO。

总结

在不同的层、不同的应用场合,对象的身份也不一样,而且对象身份的转化也是很自然的。就像你对老婆来说就是老公,对父母来说就是子女。设计这些概念的初衷不是为了唬人而是为了更好的理解和处理各种逻辑,让大家能更好的去用面向对象的方式处理问题。

千万不要陷入过度设计,大可不必为了设计而设计一定要在代码中区分各个对象。

一句话:
技术是为应用服务的。

你可能感兴趣的:(PO/VO/BO/DTO/POJO 解释)