它们各自的"职责"和"命名来源"
1 POJO(Plain Old Java Object)
• 字面意思:
Plain = 普通
Old = 老式的(非新技术)
Java Object = 就是一个 Java 对象
• 核心特征:
-- 没有继承特定框架类
-- 没有实现特定接口
-- 只有字段 + getter/setter + 可能的无参/全参构造
-- 因此它"纯粹",任何一个 Java 框架都能直接用
• 在代码里:
Employee、EmployeeLoginDTO、EmployeeLoginVO ... 只要符合上面特征,都叫 POJO。
它不是业务含义,而是"技术风格"------"一个普通 Java 对象"。
2 VO(View Object / Value Object)
• 命名来自"分层思想"
-- 数据库实体:Entity / DO(Data Object)
-- 业务逻辑:DTO(Data Transfer Object)
-- 给前端展示:VO(View Object)
• 为什么单独叫 VO?
- 只包含"前端需要看的字段"
把敏感字段(password、salt、create_time ...)全部摘掉,防止泄露。 - 方便接口演进
前端页面改版,需要多一个字段?改 VO 即可,不动数据库实体。 - 解耦
Controller 层直接返回 Entity 会导致:
-- JSON 字段冗余
-- 数据库字段一改,接口可能直接崩
VO 作为"视图模型"把后端内部结构屏蔽掉。
• 在代码里:
EmployeeLoginVO 只有 id / username / name / token 四个字段,正是页面登录成功后需要回显和保存的内容。
一句话总结
POJO 描述的是"技术形态"------一个普通 Java 对象;
VO 描述的是"业务用途"------专门为前端视图准备的数据盒子。
因此 EmployeeLoginVO 既是 POJO(普通 Java 对象),又是 VO(面向视图的对象)。