domain 层与 DO 对象
一句话理解
domain(领域层) 是业务架构中的一层,存放业务核心的对象和逻辑;DO(Data Object,数据对象) 是这一层里最常见的一类对象,本质就是承载数据的"实体类"。
先理清常见分层
一个典型 SpringBoot 项目按职责分层,每一层有自己"专属"的对象:
Controller 层 ←→ VO / DTO(入参、出参)
↓
Service 层 ←→ DTO / BO(业务处理)
↓
Mapper 层 ←→ DO(对应数据库表)
↓
数据库
domain 包 通常就是放这些对象的地方,常见的包名:domain、entity、model、pojo。
DO 到底是什么
DO = Data Object(数据对象),核心特征:
- 一对一对应数据库表结构,字段名、类型和表列基本一致
- 是 Mapper 与数据库交互时"搬运"的数据载体
- 一般在
domain/entity包下,配合@TableName、@TableId注解
// 这个类就是 DO:对应 user 表
@Data
@TableName("user")
public class UserDO {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
}
DO 与其他对象的区别(重点)

一句话区分:DO 跟表走,DTO 跟接口走,VO 跟页面走。
为什么要有 domain / DO 这一层
- 解耦:数据库字段变化(比如加字段、改列名)只影响 DO,不影响给前端返回的 VO
- 安全:DO 里可能有敏感字段(如
password),转成 VO 时可以剔除,不直接暴露给前端 - 职责清晰:每层用自己类型的对象,避免"一个实体类贯穿到底"的混乱
简单项目里,很多人会省掉 DO,直接用 entity 包下的实体类(就是你 Mapper 示例里那种),这也是常见做法,不算错——只是规范分层时叫 DO。
全部评论(0)
还没有任何评论哟~