【问题标题】:Models vs DTO in NestJSNestJS 中的模型与 DTO
【发布时间】:2021-04-22 10:44:26
【问题描述】:

我对 NestJS 完全陌生。我已经看到在 NestJS 中,创建了一个模型来指定数据的详细信息,例如在创建一个简单的任务管理器时,当我们想要指定单个任务的外观时,我们在模型中指定它(示例如下):

export interface Task {
  id: string;
  title: string;
  description: string;
  status: TaskStatus;
}

export enum TaskStatus {
  OPEN = 'OPEN',
  IN_PROGRESS = 'IN_PROGRESS',
  DONE = 'DONE',
}

但是,我后来遇到了 DTO,它再次描述了数据的形状。我的理解是在传输数据时使用 DTO,即它描述了您将发布或获取的数据类型。

我的问题是,当我已经使用 DTO 来描述数据的形状时,为什么还要使用模型?

另外,我读到使用 DTO,我们可以拥有单一的事实来源,如果我们意识到数据结构需要更改,我们不必在控制器和服务文件中单独指定它,但是,这仍然意味着我们必须更新模型?

【问题讨论】:

    标签: nestjs dto data-transfer-objects


    【解决方案1】:

    在很长一段时间内,大多数情况下,您的 DTO 和您的模型可以并且将会彼此分歧。 HTTP 请求的内容和返回的内容可能与保存在数据库中的格式不同,因此将它们分开可以随着时间的推移带来更大的灵活性。这基本上涉及DTO (Data Transfer Objects)DAO (Data Access Object) 与 DTAO(数据传输/访问对象)的争论(至少我是这么称呼它们的)。

    这也处理Single Responsibility Principle,因为每个类都应该处理一件事,而且只处理一件事。

    There's also this SO post from a Java thread that talks about what you're thinking of

    【讨论】:

      猜你喜欢
      • 2019-02-01
      • 2020-08-03
      • 1970-01-01
      • 2021-11-09
      • 2020-03-25
      • 2021-12-04
      • 2020-07-23
      • 1970-01-01
      • 2020-09-09
      相关资源
      最近更新 更多