项目架构(中2)--- DTO(数据传输对象)

news/2025/4/2 23:57:05/文章来源:https://www.cnblogs.com/zhuangdd/p/18804069

 

我们需要再学习 :

dto  辅助依赖  class-validator + class-transformer 官网

 

DTO

 

  是一个设计模式,主要用于在不同层或不同系统之间传递数据。DTO 的主要目的是将数据封装成一个对象,以便跨网络、不同模块或不同服务之间传输时,避免直接暴露底层的数据模型。

DTO 的特点:

  1. 封装数据:DTO 用来封装数据,它通常包含的是数据的属性,不包含业务逻辑。
  2. 跨层/跨系统传输:在应用架构中,DTO 常常用于不同的层(如:Controller 层和 Service 层之间)或者跨系统的通信(如:客户端与服务器之间)时传递数据。
  3. 简化数据交换:它可以避免直接传输复杂的实体对象,确保系统的安全性和解耦性。
  4. 适应不同需求:DTO 可以根据传输的需求做数据裁剪或转换,确保只传递必要的数据。

DTO 的使用场景:

  • 客户端与服务端通信:比如在 Web 开发中,前端和后端之间通过 HTTP 请求和响应传输的数据通常就是 DTO。
  • 层与层之间的数据传输:例如,在 MVC 架构中,Controller 和 Service 层之间通常会使用 DTO 来传递数据。
  • 微服务之间的通信:微服务之间进行数据传输时,通常会使用 DTO 来避免暴露内部的业务实体。

DTO 与实体(Entity)的区别:

  • Entity 通常是数据库中的数据模型,包含了更多的业务逻辑和数据库操作。
  • DTO 通常只是数据容器,不包含任何业务逻辑,旨在简化数据的传递。

示例:

// User 实体(包含业务逻辑和数据库字段)
class User {id: number;name: string;email: string;password: string; // 不应该暴露
}// UserDTO(用于前端交互,只包含需要暴露的数据)
class UserDTO {id: number;name: string;email: string;constructor(user: User) {this.id = user.id;this.name = user.name;this.email = user.email;}
}// 使用 DTO 来传递数据
const user = new User();
user.id = 1;
user.name = "John";
user.email = "john@example.com";
user.password = "secret";// 创建 UserDTO 实例并返回给前端
const userDTO = new UserDTO(user);

 

 

相关依赖

1. class-validator

class-validator 是一个用于对类对象进行验证的库。它允许你在 DTO 中定义验证规则,确保数据的有效性。通过使用装饰器(例如 @IsString(), @IsInt() 等),你可以验证 DTO 中的数据是否符合预期的格式或规则。

示例:

import { IsString, IsInt, Min } from 'class-validator';class CreateUserDTO {@IsString()username: string;@IsInt()@Min(18)age: number;
}

在这个例子中,class-validator 用来验证 CreateUserDTO 对象的 username 是否是字符串,age 是否是整数并且大于等于18。

 

2. class-transformer

class-transformer 是一个库,主要用于将普通的 JavaScript 对象转换为类的实例,或者将类的实例转换为普通的 JavaScript 对象。它可以自动转换数据的类型,并支持一些特殊的转换功能,比如属性重命名、嵌套对象的转换等。

示例:

import { plainToClass } from 'class-transformer';class CreateUserDTO {username: string;age: number;
}const plainObject = { username: 'John', age: 25 };
const userDTO = plainToClass(CreateUserDTO, plainObject);

plainToClass 函数将普通的 JavaScript 对象 plainObject 转换为 CreateUserDTO 类的实例。

 

DTO用来:

  1. 数据验证:通过 class-validator 检查数据的合法性。
  2. 数据传输:在不同层或组件之间传递数据。
  3. 数据转换:将普通的对象转换为类实例,能够使用类的方法和属性。
  4. 数据持久化:将 DTO 用作与数据库交互的数据模型。
  5. 提供增强的类型支持:确保类型安全和开发时的智能提示。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/909510.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SynTIDE:首个基于文本生成水下图像与密集注释数据集

2025-03-28,由华中科技大学的研究团队创建一种创新的水下数据合成方法 TIDE(Text-to-Image and DEnse annotation generation method)。该方法仅依赖文本输入,就能同时生成逼真的水下图像和多种高度一致的密集注释(如深度图和语义分割掩码)。TIDE 的出现有效缓解了水下场…

Linux-常用命令(2)

Linux常用命令 删除文件 rm命令 rm命令可以删除文件或者目录,系统不会产生任何提示 rm -r 文件名 //递归删除,主要用于删除目录以及它包含的内容 rm -f 文件名 //强制删除,系统不会询问,直接删除指定的目录或者文件 rm -i 文件名 //在删除的时候系统会提示要不要删除 rm…

【UWP】让 UWP 自己和自己通信

众所周知,UWP 一般是运行在沙盒里面的,当我们需要访问沙盒外资源的时候,就需要通过沙盒外的代理服务器来获取。一般情况下我们都是利用 WinRT API 通过 Runtime Broker 来和沙盒外互通,遇到要自定义的情况则是手动开一个 Win32 服务器来互通,但是有没有可能我们可以直接拿…

通义灵码助力技术求职:如何成为笔试面试冲刺的“超级助手”

在技术岗位竞争日益激烈的当下,求职季的备战已不仅是知识储备的较量,更是效率与实战能力的比拼。面对海量面试题、复杂算法挑战及快速迭代的技术框架,开发者亟需高效工具辅助突破瓶颈。阿里云推出的智能编码工具通义灵码,凭借其代码生成、优化及智能问答等核心能力,正成为…

项目架构(中)-- 依赖库【reflect-metadata】【inversify】【inversify-express-utils】

之前的文章已经学习了接口编写express 官网 orm框架 prisma 官网我们需要再学习:inversify + reflect-metadata 实现依赖注入 官网连接工具 inversify-express-utils 官网dto class-validator + class-transformer 官网reflect-metadata是一个 JavaScript 库,用于在运行时…

Linux-常用命令(1)

Linux-常用命令(1)基本命令 用户权限 sudo命令 linux系统,用户分为超级用户(root用户,拥有一切权限)和普通用户 sudo命令可以不在root权限下执行管理员的权限,使用此命令用户可以使用管理员的权限,下载和配置文件,使用sudo也可以将普通用户切换为root用户 sudo su //…

企业级电脑监控解决方案如何选?华企盾DSC助力高效管控

随着企业数字化转型加速,办公终端已成为企业运营的核心载体。如何有效规范员工数字化办公行为、防范数据泄露风险,已成为现代企业管理的必修课。华企盾DSC数据防泄密系统作为专业的企业级终端管理方案,为企业提供全方位的管控支持。1. 应用程序分级管控系统支持建立应用程序…

higress~Remote MCP Server 托管方案

文章出处:https://www.53ai.com/news/OpenSourceLLM/2025032902736.htmlMCP Server 的实施存在着诸多挑战,特别是在认证授权、服务可靠性和可观测性方面,Higress 作为 AI 原生的 API 网关,提供了完整的开源 MCP Server 托管解决方案。即将上线的 MCP 市场,将大幅降低开发者…

某网页单据打印辅助AutoHotkey v1.0脚本,本来打印单据需要用鼠标点击多次,

某网页单据打印辅助AutoHotkey v1.0脚本,本来打印单据需要用鼠标点击多次, ; 某网页单据打印辅助AutoHotkey v1.0脚本,本来打印单据需要用鼠标点击多次, ; 运行此脚本之后只需在输入完毕后按快捷键热键<F4> ; 为了便于寻找快捷键位置,我在F4键的键帽上贴了黄色贴纸 ; 可用…

如何选择适合中小企业的PLM项目管理工具

中小企业在发展过程中,项目管理的高效性与准确性愈发重要,PLM(产品生命周期管理)项目管理工具成为众多企业提升竞争力的关键选择。然而,面对市场上琳琅满目的工具,如何挑选适合自身的PLM项目管理工具,成为中小企业管理者亟待解决的问题。这不仅关系到项目的顺利推进,更…

PLM合规性管理在汽车行业的挑战与机遇

引言 PLM(产品生命周期管理)合规性管理在汽车行业正扮演着日益关键的角色。随着汽车产业的不断发展,法规要求愈发严格,消费者对产品质量和安全性的期望也持续攀升。汽车企业需要在整个产品生命周期内确保合规,从设计研发阶段到生产制造,再到产品的售后使用与回收处理。这…

信创行业如何助力中小企业创新

信创产业,即信息技术应用创新产业,旨在实现信息技术领域的自主可控,推动产业数字化转型。在数字化浪潮中,中小企业作为经济发展的重要力量,面临着诸多挑战与机遇。信创行业凭借其独特的技术优势和创新理念,能够为中小企业的创新发展提供强大助力。通过在技术、产品、服务…