POJO PO BO DO DTO VO
概述
缩写 | 全称 | 中文 | 功能 | 说明 |
---|---|---|---|---|
POJO | plain ordinary java object | 无规则简单java对象 | 中间对象,与其他对象转换 | |
PO | persistent object | 持久对象 | 数据对象对应数据库中的entity | |
BO | business object | 业务对象 | 封装业务逻辑对象 | |
VO | value object / view object | 表现层对象 | 封装视图层对象 | |
DTO | data transfer object | 数据传输对象 | 跨进程或远程传输 | |
DO | domain object | 领域对象 | 从现实世界中抽象出来的有形或无形的业务实体 | |
DAO | data access object | 数据访问对象 | 封装对数据库访问对象 |
问题
- 为什么项目中要存在多种对象,多种对象直接需要相互转换,是否无用?
- 举例:数据插入操作
- HTTP:
- (Controller 层 )VO 对象 --> (Service 层) BO 对象 --> (DAO 层) PO 对象 --> DAO 对象
- RPC :
- (RPC 接口)DTO 对象 --> --> (Service 层) BO 对象 --> (DAO 层) PO 对象 --> DAO 对象
- HTTP:
- 回答:
- 世界上有大狗(可以看家护院)的存在也有小狗存在的必要,没有一种事务的存在是没有理由的
- 代码中不同的层次需要使用不同的对象,使用不同的对象是为了更好的理解业务及解决问题
- 举例:
- PO / DO 对象通常对应数据表实体映射对象;如果没有BO对象,此时业务需求需要将时间格式化后展示,需要在PO类中增加属性,但增加的属性却不是表中应有的字段,使PO类的含义发生了变化
- 如设计活动,活动实体是一张表,活动页面样式、活动优惠等等又是一张表,在将数据返给前端时,前端不需要知道后端是几张表的实现,只需要知道解析这个对象中的相关属性即可;此时需要BO对象来中转,BO对象对应多个PO对象
- 举例:
- 有这种疑问通常是BO与PO对象的属性完全没有区别,此时需要考虑程序业务逻辑,是否需要将查询结果全部返回给调用方
- 举例:数据插入操作