Java - DO,DTO,BO,AO,VO 区别

可以参考 《阿里巴巴Java开发手册》说明:

分层领域模型规约

DO (Data Object)

与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。

DTO (Data Transfer Object)

数据传输对象,Service 或 Manager 向外传输的对象。

BO (Business Object)

业务对象。由 Service 层输出的封装业务逻辑的对象。

AO(ApplicationObject)

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

VO (View Object)

显示层对象,通常是 Web 向模板渲染引擎层传输的对象。

主要体现在视图的对象,对于一个WEB页面将整个页面的属性封装成一个对象,然后用一个VO对象在控制层与视图层进行传输交换。

Query

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

各层命名规约

Service/DAO层方法命名规约

  1. 获取单个对象的方法用get做前缀。
  2. 获取多个对象的方法用list做前缀。
  3. 获取统计值的方法用count做前缀。
  4. 插入的方法用save/insert做前缀。
  5. 删除的方法用remove/delete做前缀。
  6. 修改的方法用update做前缀。

领域模型命名规约

  1. 数据对象: xxxDO,xxx即为数据表名。
  2. 数据传输对象: xxxDTO,xxx为业务领域相关的名称。
  3. 展示对象: xxxVO,xxx一般为网页名称。
  4. POJO是DO/DTO/BO/VO的统称,禁止命名成xxxPOJO。

补充

除上面之外,可能有时在一些程序源码/教程中还会看到:

Entity

最常用实体类,基本和数据表一一对应,一个实体一张表。

PO (persistant object)

代表持久层对象的意思,对应数据库中表的字段,数据库表中的记录在java对象中的显示状态,最形象的理解就是一个PO就是数据库中的一条记录。

好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象。Vo和Po,都是属性加上属性的get和set方法;表面看没什么不同,但代表的含义是完全不同的。

POJO (plian ordinary java object)

代表简单无规则java对象
纯的传统意义的java对象,最基本的Java Bean只有属性加上属性的get和set方法

Dao (data access object)

代表数据访问对象的意思,是sun的一个标准j2ee设计模式的接口之一,负责持久层的操作 。
这个基本都了解,Dao和上面几个O区别最大,基本没有互相转化的可能性和必要,主要用来封装对数据的访问,注意,是对数据的访问,不是对数据库的访问。

Controller

代表控制层,主要是Action/Servlet等构成(Spring MVC则是通过@Controller标签使用)此层业务层与视图层打交道的中间层,负责传输VO对象和调用BO层的业务方法,负责视图层请求的数据处理后响应给视图层。

View

代表视图层的意思,主要是指由JSP、HTML等文件形成的显示层。

所以实际项目中,一般都是这样应用的:
控制层 (controller-action),业务层/服务层 ( bo-manager-service),实体层 (po-entity),dao (dao),视图对象 (Vo-),视图层 (view-jsp/html)


参考: