详解架构设计中的各种数据模型【PO，VO，BO，充血模型 ……】

接触到这些乱七八糟的数据模型时，真的一头雾水，在设计架构时也乱七八糟，不知道怎么根据数据模型取对应的包名，我也是翻阅了网上的各种资料，没有人说的通俗易懂，那我就自己根据经验整理了一下

POJO【plain old java object】普通 Java 对象，可以作为其他数据模型的基础

VO【value object】 ：值对象是不可变的对象，没有唯一 ID 标识符，用于表示一组值【意味着如果两个值对象的属性相同，那么它们就是相等的】

可以包含简单的业务逻辑操作

VO 中通常重写 equals 和 hashCode 方法，以便基于值进行比较

PO / 实体【Entity】 ：实体必须要有唯一 ID 标识符，意味着如果两个 Entity 的属性值相同，它们也不相等；PO 是与数据库表相映射的 Java 对象【所以 PO 和实体可以看作是相同的概念】

DTO【data transfer object】：DTO 用于在不同层之间传输数据

不包含任何业务逻辑

充血模型 ：充血模型 = PO + 业务逻辑，如果某个 PO 中有业务逻辑，那它就是充血模型

BO【Business object】：业务对象包含业务逻辑

只用于 Service 层