阿里巴巴Java开发手册中的DO、DTO、BO、AO、VO、POJO定义
分层领域模型规约:
-
DO( Data Object)
:与数据库表结构一一对应,通过DAO层向上传输数据源对象。 -
DTO( Data Transfer Object)
:数据传输对象,Service或Manager向外传输的对象。 -
BO( Business Object)
:业务对象。 由Service层输出的封装业务逻辑的对象。 -
AO( Application Object)
:应用对象。 在Web层与Service层之间抽象的复用对象模型,极为贴近展示层,复用度不高。 -
VO( View Object)
:显示层对象,通常是Web向模板渲染引擎层传输的对象。 -
PO(Persistant Object)
:持久对象,用于表示数据库中的一条记录映射成的 java 对象。PO 仅仅用于表示数据,没有任何数据操作。通常遵守 Java Bean 的规范,拥有 getter/setter 方法。 -
POJO( Plain Ordinary Java Object)
:在阿里手册中, POJO专指只有setter/getter/toString的简单类,包括DO/DTO/BO/VO等。 -
Query
:数据查询对象,各层接收上层的查询请求。 注意超过2个参数的查询封装,禁止使用Map类来传输。 -
DAO(Data access object)
: 数据访问对象,主要用来封装对数据库的访问。通过它可以把POJO持久化为PO,用PO组装出来VO、DTO;用于表示一个数据访问对象。使用 DAO 访问数据库,包括插入、更新、删除、查询等操作,与 PO 一起使用。DAO 一般在持久层,完全封装数据库操作,对外暴露的方法使得上层应用不需要关注数据库相关的任何信息。
一个POJO持久化以后就是PO;直接用它传递、传递过程中就是DTO;直接用来对应表示层就是VO。
领域模型命名规约:
数据对象
:xxxDO,xxx即为数据表名。数据传输对象
:xxxDTO,xxx为业务领域相关的名称。展示对象
:xxxVO,xxx一般为网页名称。POJO
是DO/DTO/BO/VO的统称,禁止命名成xxxPOJO。
个人理解
举例
有一张user表 有这么几个字段,id,name,sex,address,create_time,update_time
PO:就是对应的User(包含数据库中的所有字段,有getter和setter方法)这么一个类
DTO: 就是可以写一个UserDTO可以用于RPC啥的
DAO:就相当于我们写的mapper用来crud
VO:就是将user中需要的信息返回给视图,展示的话不需要更新时间、创建时间这种
BO:业务封装我没什么理解,但是应该就是把user类和其他类业务需要的字段组合成一个BO来操作
POJO:DO/DTO/BO/VO都叫POJO