Entity

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

DAO(Data Access Object):数据访问对象

是sun公司的一个标准j2ee设计模式的接口之一,负责持久层的操作。Dao和其他的O区别最大,基本没有互相转化的可能性和必要,主要用来封装对数据的访问,而不是对数据库的访问。

PO(Persistant Object):持久层对象

对应数据库中表的字段,数据库中表中的记录在java对象中的显示状态,即一个PO就是数据库中的一条记录。

BO( business object):业务对象

封装业务逻辑为一个对象(可以包括多个PO,通常需要将BO转换成PO,才能进行数据的持久化,反之,从DB中得到的PO,需要转换成BO,才能在业务层中使用)。

DTO(Data Transfer Object):数据传输对象

前端调用时传输,也可以理解为“上层”调用时传输。
比如一张表有100个字段,那么对应的PO就有100个属性。但是我们界面上只要显示10个字段,客户端用WEB service 来获取数据,没必要把整个PO对象传到客户端,这时我们就可以用只有这10个属性的DTO来传递到客户端,这样也不会暴露服务端表结构。

VO(Value Object):值对象

VO就是展示用的数据,不管展示方式是网页,还是客户端,还是App,只要这个东西是让人看到的,就叫VO。VO主要的存在形式就是js中的对象(也可以简单理解成json)。

Pojo(Plain Ordinary Java Object):纯的传统意义的java对象

最基本的javaBean只有属性加上属性的get和set方法。Pojo可以转化为PO、DTO、VO。比如POJO在传输过程中就是DTO。

DO

DO跟上面其中一个概念相同,现在有两个版本:

一个是阿里巴巴的开发手册中的定义,DO(Data Object)等同于PO

另一个是在DDD(Domain-Driven Design)领域驱动设计中,DO(Domain Object),等同于BO。

一些实际的建议:

  1. PO不可省,不管叫PO还是Entity。
  2. 一些工具类的系统和一些业务不是很复杂的系统,DTO是可以和BO合并成一个,当业务扩展时注意拆分就行。
  3. VO是可以第一个优化掉的,展示业务不复杂的可以不要,直接用DTO。
  4. 多人协作时一定要保证大家的概念一致。
  5. DAO PO BO DTO VO DO的区别_数据库


  6. DAO PO BO DTO VO DO的区别_字段_02

VO和DTO的区别

  1. 字段不一样,VO根据一些需要会删减一些字段
  2. 值不一样,VO会根据需要对DTO中的值进行展示业务的解释。
    例子:
    DTO可能是这样的:
{
"gender":"男",
"age":35
}

对于业务一来说,只需要性别,而且因为是一个古风聊天室,因此经过业务解释业务一的VO是:

{
"gender":"公子"
}

对于业务二来说只需要年龄,而不需要精确的年龄,因此经过业务解释业务二的VO是

{
"age":"30~39"
}

BO和DTO的区别

主要区别为字段的删减
BO对内,为了进行业务计算,需要辅助数据,或者是一个业务有多个对外的接口,BO可能会含有很多接口对外所不需要的数据,因此DTO需要在BO的基础上,只要自己需要的数据,然后对外提供在这个关系上,通常不会有数据内容的变化,内容变化要么在BO内部业务计算的时候完成,要么在解释VO的时候完成。