POJO

PO

Persistant object(持久对象)

对应数据模型(数据库),可以看成是与数据库中的表相映射的java对象.最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合.PO仅仅用于表示数据,不包含任何对数据库的操作.通常遵守 Java Bean 的规范,拥有 getter/setter 方法.

DAO

Data Access Object(数据访问对象)

对持久层的操作,为service层提供接口,此对象用于访问数据库,通过其中对数据库的操作方法,结合 PO,对数据库进行相关操作.配合VO,提供数据库的CRUD操作.加载业务逻辑与数据库资源之间.

VO

Value Object(表现对象)

与前端进行交互的java对象,主要显示对应界面的数据对象,对于前端不需要的数据,出于减少数据量大小和保护数据结构不外泄的目的,不应该在VO中体现出来,通常遵守 Java Bean 的规范,拥有 getter/setter 方法.

DTO

Data Transfer Object(数据传输对象)
通常用于不同服务或服务不同分层之间的数据传输,DTO与VO概念相似,字段也基本一致.但又有一些不同,不同主要是设计理念上的.比如 API 服务需要使用的 DTO 就可能与 VO 存在差异.通常遵守 Java Bean 的规范,拥有 getter/setter 方法.

BO

Business Object业务对象
业务对象,封装对象、复杂对象,里面可能包含多个类.包含了业务逻辑,常常封装了对DAO,RPC等的调用,可以进行PO/VO/DTO之间的转换.BO通常位于业务层,区别于对外提供服务的服务层:BO提供了基本业务单元的积分业务操作,在设计上属于被服务层业务流程调用的对象,一个业务流程可能需要调用多个BO来完成.

POJO

plain ordinary java Object简单无规则java对象

PO、VO、DTO 都是典型的 POJO而 DAO、BO一般都不是 POJO,只提供一些调用方法。

介绍一个简单的例子:

用户类  name phone
对于数据库层也就两列,业务层,传输,和前台展示时,都只有这两项.
用户类 + password
那么PO属性也是3个,一般数据库里这几个字段你的PO就有几个属性,但是在传输层和前台展示时,不应该把password这个属性一块传递过去.
    po : name phone password
    dto : anme phone
    vo : name phone
现在有添加一个枚举status显示用户的一些状态,前台不会直接将枚举用来显示,会根据状态进行一些操作.
    po : name phone password status
    dto : name phone status
    vo : name phone
接着BO,一个用户一定会关联很多其他的表
例:用户设置/用户信息等
BO就包括用户本身的属性 + 用户设置 + 用户信息

例2:

数据表:表中的面试题包括编号、题目、选项、答案、创建时间、修改时间.
PO:包括题目、选项、答案、创建时间、修改时间.
VO:题目、选项、答案、上一题URL、下一题URL.
DTO:编号、题目、选项、答案、上一题编号、下一题编号.
DAO:数据库增删改查方法;BO:业务基本操作.

-------------本文已结束感谢您的阅读-------------