PO BO VO DTO POJO DAO DO概念
1.1 PO
它的含义是Persistent Object,即持久化对象。
- 职责:与数据库表严格1:1映射,仅承载数据存储结构
- 特征:
- 属性与表字段完全对应
- 无业务逻辑方法(仅有getter/setter)
1.2 DAO
它的含义是Data Access Object,即数据访问对象。
- 职责:封装所有数据库操作(CRUD),隔离业务与存储细节
- 特征:
- 接口方法对应SQL操作
- 返回PO或PO集合
1.3 BO
它的含义是Business Object,即业务对象。
- 职责:封装核心业务逻辑,聚合多个PO完成复杂操作
- 特征:
- 包含业务状态机、校验规则
- 可持有多个PO引用
1.4 DTO
它的含义是Data Transfer Object,即数据传输对象。
- 职责:跨层/跨服务数据传输,屏蔽敏感字段
- 特征:
- 属性集是PO的子集(如排除
password
字段) - 支持序列化(实现
Serializable
)
- 属性集是PO的子集(如排除
1.5 VO
它的含义是View Object,即视图对象。
- 职责:适配前端展示,包含渲染逻辑
- 特征:
- 属性可包含格式化数据(如日期转
yyyy-MM-dd
) - 聚合多表数据(如订单VO包含用户名字)
- 属性可包含格式化数据(如日期转
1.6 POJO
它的含义是Plain Old Java Object,即普通Java对象。
- 职责:基础数据容器,可扮演PO/DTO/VO角色
- 特征:
- 只有属性+getter/setter
- 无框架依赖(如不继承Spring类)
总结
关于对象的4个核心原则:
- 单一职责:
PO只存数据,BO只管业务,VO只负责展示——绝不越界! - 安全隔离:
- PO永不出DAO层(防数据库泄露)
- VO永不出Controller(防前端逻辑污染服务)
- 性能优先:
- 大对象转换用MapStruct(编译期生成代码)
- 嵌套集合用批量查询(杜绝N+1)
- 适度设计:
- 10张表以内的系统:可用POJO一撸到底
- 百张表以上核心系统:必须严格分层