Skip to content
🗂️ 文章分类: 后端  
🏷️ 文章标签: Java  
📝 文章创建时间: 2020-12-03
🔥 文章最后更新时间:暂无

[toc]

Java中常见的对象模型简述-(DO、BO、DTO、VO、AO、PO)

作为Java开发人员,大部分人不免要接触VO,BO,PO,DO,DTO之类的对象模型。

这些模型主要是为了在多人开发的情况下,为了对项目中编码进行规范处理而创建的。

如图所示 blog_20240416204103.png

PO(Persistant Object) 持久对象

一个PO就是数据库中的一条记录,用于表示数据库中的一条记录映射成的 java 对象。PO仅仅用于表示数据,没有任何其他操作。通常遵守 Java Bean 的规范,拥有 getter/setter 方法。

好处是可以将一条记录对应为一个PO对象处理,PO可以方便转化为其他对象

POJO(Plain ordinary java object) 简单java对象

一个POJO持久化以后就是PO;直接用它传递、传递过程中就是DTO;直接用来对应表示层就是VO。

VO(View Object) 视图对象

VO视图对象。主要对应界面显示的数据对象。通常一个页面,用一个VO对象对应该界面的值。

注意VO只包含前端需要展示的数据,对于前端不需要的数据,比如数据创建和修改的时间等字段,出于减少传输数据量大小和保护数据库结构不外泄的目的,不应该在 VO 中体现出来。

VO 通常遵守 Java Bean 的规范,拥有 getter/setter 方法。

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

DTO数据传输对象 主要用于展示层与服务层之间的数据传输。

比如一张表有100个字段,则对应的PO就有100个属性。但是界面上只显示10个字段,没有必要把整个PO对象传递到界面。

这时可以设计一个DTO,该DTO只有这10个属性。通过DTO把PO的数据传递给VO。这样不会暴露服务端表结构。若此时只用DTO来代替VO,那么DTO就转变为VO了

DTO 通常用于不同服务或不同分层之间的数据传输。DTO 与 VO 概念相似,并且通常情况下字段也基本一致。但 DTO 与 VO 又有一些不同,比如 API 服务需要使用的 DTO 就可能与 页面需要的VO 存在差异。

DTO 通常遵守 Java Bean 的规范,拥有 getter/setter 方法。

BO(Business Object) 业务对象

主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。

比如一个简历数据,包含教育经历数据、工作经历数据、社会关系数据等等。可以把教育经历对应一个PO,工作经历对应一个PO,社会关系对应一个PO。建立一个对应简历数据的BO对象。每个BO包含这些PO。这样处理业务逻辑时,我们就可以针对BO去处理。

DAO(Data access object) 数据访问对象

DAO用来封装对数据库的访问。通过它可以把POJO持久化为PO,用PO组装出来VO,DTO;

DAO用于表示一个数据访问对象。使用 DAO 访问数据库,包括插入、更新、删除、查询等操作,与 PO 一起使用。

DAO一般在持久层,完全封装数据库操作,对外暴露的方法使得上层应用不需要关注数据库相关的任何信息。

结论

VO,BO,PO,DTO这样分层还是很有意义的。尤其在团队成员较多的情况下,结构更加一目了然,同时也能很大程度避免多端系统数据所需不一致时,有人修改属性影响其他页面。

但也完全没有必要教条主义,把这些全部用上,需要根据所开发的业务复杂度来取舍,如果本身业务逻辑不复杂,照搬全上反而让开发编码变的更复杂。

例如业务不复杂,根本没有多端展示的差异化,VO可以直接拿掉,直接使用DTO传输到前端数据即可。

同时在使用过程中,最重要的是要在团队中达成共识,概念一致,如果使用了这些,但各按各的理解来,甚至抓起来就直接用,反而会让代码变得更乱,还不如直接POJO、DTO打天下。

Released under the MIT License.