Java开发各层对象含义 PO,VO,DAO,BO,POJO

java的几种对象(PO,VO,DAO,BO,POJO)解释

  • PO: persistant object 持久对象,可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。拥有getter/setter方法。
  • DAO: data accessobject 数据访问对象,此对象用于访问数据库,包括插入、更新、删除、查询等操作,通常和PO结合使用。DAO 一般在持久层,完全封装数据库操作,对外暴露的方法使得上层应用不需要关注数据库相关的任何信息。
  • BO: business object 业务对象,BO 包括了业务逻辑,常常封装了对 DAO、RPC 等的调用,可以进行 PO 与 VO/DTO 之间的转换。BO 通常位于业务层,在设计上属于被服务层业务流程调用的对象,要区别于直接对外提供服务的服务层:BO 把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。比如一个简历,有教育经历、工作经历、 关系等等。我们可以把教育经历对应一个PO,工作经历对应一个PO, 关系对应一个PO。建立一个对应简历的BO对象处理简历,每个BO包含这些PO。这样处理业务逻辑时,我们就可以针对BO去处理。
  • DTO: Data Transfer Object 用于表示一个数据传输对象。Service或Manager向外传输的对象。通常遵守 Java Bean 的规范,拥有 getter/setter 方法。主要用于远程调用等需要大量传输对象的地方。比如一张表有100个字段,那么对应的PO就有100个属性。但界面上只要显示10个字段,就可以用只有这10个属性的DTO来传递结果到客户端。到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为VO。DTO 与 VO 概念相似,并且通常情况下字段也基本一致。但 DTO 与 VO 又有一些不同,这个不同主要是设计理念上的,比如 API 服务需要使用的 DTO 就可能与 VO 存在差异。
  • VO: value object值对象。用于表示一个与前端进行交互的 java 对象。 VO 只包含前端需要展示的数据,对于前端不需要的数据,比如数据创建和修改的时间等字段,出于减少传输数据量大小和保护数据库结构不外泄的目的,不应该在 VO 中体现出来。通常遵守 Java Bean 的规范,拥有 getter/setter 方法。
  • POJO: plain ordinary java object 表示一个简单 java 对象。POJO是最常见最多变的对象,是一个中间对象,也是我们最常打交道的对象。上面说的 PO、VO、DTO 都是典型的 POJO。一个POJO持久化以后就是PO,直接用它传递、传递过程中就是DTO,直接用来对应表示层就是VO。而 DAO、BO 一般都不是 POJO,只提供一些调用方法。

例:

假设有一个面试系统,数据库中存储了很多面试题,通过 web 和 API 提供服务。可能会做如下的设计:

数据表:表中的面试题包括编号、题目、选项、答案、创建时间、修改时间;

PO:包括题目、选项、答案、创建时间、修改时间;

DAO:数据库增删改查方法;

BO:业务基本操作。

DTO:编号、题目、选项、答案、上一题编号、下一题编号;

VO:题目、选项、答案、上一题URL、下一题URL;