目录
↑ https://www.yuque.com/u12481951/im56n0/cmkm0d
来源:https://www.zhihu.com/question/39651928/answer/369889819
PO: Persistant Object
数据库中的表相映射的java对象
仅用于表示数据,没有任何数据操作
遵守 Java Bean 的规范,拥有 getter/setter 方法。
DAO:Data Access Object
表示一个数据访问对象
用 DAO 访问数据库,包括插入、更新、删除、查询
与 PO 一起用
DAO 一般在持久层,完全封装数据库操作
对外暴露的方法 使得上层应用不需要关注数据库相关的任何信息。
VO:Value Object
与前端进行交互的 java 对象。
这里可不可以使用 PO 传递数据?实际上,这里的 VO 只包含前端需要展示的数据即可,对于前端不需要的数据,如数据创建和修改的时间等字段,出于减少传输数据量大小和保护数据库结构不外泄的目的,不应该在 VO 中体现出来
通常遵守 Java Bean 的规范,拥有 getter/setter 方法。
DTO:Data Transfer Object
用于表示一个数据传输对象
DTO 通常用于不同服务或服务不同分层之间的数据传输。
DTO 与 VO 概念相似,并且通常情况下字段也基本一致。但 DTO 与 VO 又有一些不同,如 API 服务需要使用的 DTO 就可能与 VO 存在差异。通常遵守 Java Bean 的规范,拥有 getter/setter 方法。
BO:Business Object
用于表示一个业务对象
BO 包括了业务逻辑,常封装了对 DAO、RPC 等的调用,可以进行 PO 与 VO/DTO 之间的转换
BO 通常位于业务层,要区别于直接对外提供服务的服务层:BO 提供了基本业务单元的基本业务操作,在设计上属于被服务层业务流程调用的对象,一个业务流程可能需要调用多个 BO 来完成
POJO:Plain Ordinary Java Object
表示一个简单 java 对象
上面说的 PO、VO、DTO 都是典型的 POJO。而 DAO、BO 一般都不是 POJO,只提供一些调用方法。
实例
对于面试题存在数据库中:
数据表:1编号、2题目、3选项、4答案、5创建时间、6修改时间
PO:1题目、2选项、3答案、4创建时间、5修改时间
VO:1题目、2选项、3答案、4上一题URL、5下一题URL
DTO:1编号、2题目、3选项、4答案、5上一题编号、6下一题编号
DAO:数据库增删改查
BO:业务基本操作