前言

在了解DTO与Entity的区别之前,我们先来了解一下它们在项目中的数据路径。

[客户端 Client]
       │
       ▼ (1. 携带 Request DTO)
[Controller] ── (2. 校验与格式转换: ValidationPipe)
       │
       ▼ (3. 传递 DTO 或 解构参数)
[Service] ──── (4. 业务逻辑,将 DTO 转换为 Entity 或操作 ORM)
       │
       ▼ (5. 写入/读取 Entity)
[Database]
       │
       ▼ (6. 返回 Entity 给 Service)
[Service / Controller] ── (7. Entity 转换为 Response DTO / 序列化脱敏)
       │
       ▼ (8. 返回安全响应)
[客户端 Client]

DTO(Data Transfer Object)是数据传输对象,主要用于客户端与服务端之间的数据传输。它通常用于接收请求数据和返回响应数据,具有数据验证和格式转换的功能。

Entity(实体)是数据库中的数据模型,通常用于表示数据库表结构和数据关系。它主要用于与数据库进行交互,执行增删改查等操作。

虽然是这么说,但是在实际项目中,Entity 常常在 NestJS 中被兼职将数据安全返回给客户端(与 @Exclude()ClassSerializerInterceptor 配合使用),这也是 NestJS 提供的一种极具性价比的偷懒方案,避免了开发者每个接口都去写一个 Response DTO。

特别是在与 Prisma ORM 结合使用时,Prisma 的 Entity 是由 Prisma 自动生成的,我们常常通过 TypeScript 的 implements 来约束 Entity 类必须实现 Prisma 的表结构类型,再通过 @Exclude() 等装饰器来实现数据脱敏转化,最后返回给客户端。

此处内容已隐藏回复后方可阅读。

分类: NestJS中级 标签: NestjsDTOEntityMapped Types

评论

暂无评论数据

暂无评论数据

目录