Spring中的VO、BO、DTO、PO、DO

概述

github
github

POJO(Plain Ordinary Java Object)

无规则简单java对象 中间对象。实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。通指没有使用Entity Beans的普通java对象,可以把POJO作为支持业务逻辑的协助类。

PO(Persistent Object)

持久对象。在Object/Relation Mapping(ORM)框架中的Entity。

BO(Business Object)

业务对象。把业务逻辑封装为对象。通过调用Dao方法,结合PO或VO进行业务操作。

例子:

1.比如一个简历,有教育经历、工作经历、社会关系等等。
2.我们可以把教育经历对应一个PO,工作经历对应一个PO,社会关系对应一个PO。
3.建立一个对应简历的BO对象处理简历,每个BO包含这些PO。
4.这样处理业务逻辑时,我们就可以针对BO去处理。

VO(Value Object/View Object)

表示层对象。与业务层之间的数据传递,主要体现在视图的对象,通过封装成VO对象与视图层进行数据交互。

DTO(Data Transfer Object)

数据传输对象。
数据传输目标往往是数据访问对象从数据库中检索数据。数据传输对象与数据交互对象或数据访问对象之间的差异是一个以不具有任何行为除了存储和检索的数据(访问和存取器)。
简单来说,当我们需要一个对象10个字段的内容,但这个对象总共有20个字段,我们不需要把整个PO对象全部字段传输到客户端,而是可以用DTO重新封装,传递到客户端。此时,如果这个对象用来对应界面的展现,就叫VO。

DO(Domain Object)

领域对象。从现实世界中抽象出来的有形或无形的业务实体。

DAO(Data Access Object)

数据访问对象。封装对数据库访问对象。

领域模型命名规约

数据对象:xxxDO,xxx即为数据表名。

数据传输对象:xxxDTO,xxx为业务领域相关的名称。

展示对象:xxxVO,xxx一般为网页名称。

POJO是DO/DTO/BO/VO的统称,禁止命名成xxxPOJO。

分层领域模型规约

DO(Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象。

DTO(Data Transfer Object):数据传输对象,Service或Manager向外传输的对象。

BO(Business Object):业务对象。 由Service层输出的封装业务逻辑的对象。

AO(Application Object):应用对象。 在Web层与Service层之间抽象的复用对象模型,极为贴近展示层,复用度不高。

VO(View Object):显示层对象,通常是Web向模板渲染引擎层传输的对象。

POJO(Plain Ordinary Java Object):在本手册中, POJO专指只有setter/getter/toString的简单类,包括DO/DTO/BO/VO等。

Query:数据查询对象,各层接收上层的查询请求。 注意超过2个参数的查询封装,禁止使用Map类来传输。

应用与区别

VO与DTO的区别

VO与DTO都是完成展示层与服务层之间传输的数据对象。
但是在服务的业务有所不同,DTO代表服务层需要接收的数据和返回的数据,而VO代表展示层需要显示的数据。

DTO与DO的区别

DO更偏向与业务的抽象。DTO会更偏向于对展示层方向的偏移。

DO与PO的区别

PO更偏向与数据表的Entity、DO会更偏向与业务层的抽象。