2 nestjs 设计模式

请添加图片描述

回顾 MVC

请添加图片描述

MVC(Model-View-Controller)设计模式是一种常用于软件开发的架构模式,旨在分离应用程序的不同部分,使得它们可以独立地开发、测试和维护。它将应用程序分为三个主要组件:

Model(模型):

  • 职责:负责管理应用程序的数据和业务逻辑。它直接与数据源(如数据库)进行交互,处理数据的获取、保存和更新。
  • 特点:模型不直接处理用户界面或用户输入,它的主要任务是保证数据的完整性和一致性。

View(视图):

  • 职责:负责呈现数据(模型)给用户,并将用户的输入传递给控制器。视图是用户与应用程序交互的界面部分。
  • 特点:视图只关注如何展示数据,它不应该直接修改数据或处理业务逻辑。

Controller(控制器):

  • 职责:作为模型和视图之间的桥梁,处理用户的输入,更新模型,并决定显示哪些视图。
  • 特点:控制器接收用户的输入,调用模型的更新方法,并选择相应的视图来展示数据。

在nestjs中的应用

Nest (NestJS) 是一个用于构建高效、可扩展的Node.js服务器端应用程序的框架。它使用渐进式 JavaScript,使用 TypeScript 构建并完全支持TypeScript(但仍允许开发人员使用纯 JavaScript 编写代码),并结合了 OOP(面向对象编程)、FP(函数式编程)和 FRP(函数式响应式编程)的元素。

Controller(控制器)

在NestJS中,控制器是一个基本构建块,它处理传入的 HTTP 请求、处理它们并返回适当的 HTTP 响应。控制器负责处理路由逻辑并与服务层交互以执行各种操作。

Service(服务)

在NestJS中,服务是一个封装了应用程序业务逻辑的 TypeScript 类。服务负责处理与数据相关的操作、与数据库、第三方 API 或其他外部资源交互,以及执行应用程序模块或控制器所需的任务。

Module(模块)

在NestJS中,模块是一个基本构建块,可帮助您将应用程序组织和划分为更小、更易于管理的部分。每个模块都封装了相关组件,例如控制器、提供程序(服务、存储库)和其他相关模块。模块可提高应用程序代码库的模块化、可重用性和可维护性。

main.ts

在NestJS应用程序中,main.ts 文件是应用程序的入口点,类似于许多编程语言中的 main 函数是入口点。它是启动 NestJS 应用程序时执行的第一个文件。main.ts 文件负责初始化和引导 NestJS 应用程序、设置各种配置以及启动应用程序。

实体 Entity (Model)

在NestJS应用程序中,实体充当模型,定义应用程序域内数据的结构和功能。此模型充当现实世界对象的表示,并指导如何组织和存储特定数据实体。例如,设想任务管理应用程序中的“任务”实体。此“实体”充当蓝图,概述任务的标题、描述和状态等属性,就像模型描述实际对象的属性一样。此外,实体可以封装与其他实体的关系,类似于模型如何描述不同对象之间的关联。此外,实体可以包含特定于其所表示数据的方法和行为,类似于模型如何包含与其对应的现实世界对象相关的函数。最终,实体为应用程序内高效的数据存储和交互奠定了基础,类似于模型为管理现实世界实体奠定了基础。

将 TypeORM 库集成到NestJS应用程序中后,实体将获得增强的功能,以实现无缝数据库交互。TypeORM 允许您使用面向对象的语法从数据库中创建、检索、更新和删除记录。通过利用装饰器和元数据,可以使用关系、验证和其他与数据库相关的细节来定义实体。TypeORM 抽象了底层 SQL 查询,使您能够以更直观和以 TypeScript 为中心的方式使用数据库。通过将现实世界的概念与数据库交互相结合,实体和 TypeORM 的这种组合使开发人员能够构建强大且可维护的应用程序,同时受益于 TypeORM 等 ORM 提供的强大功能。

// task.entity.ts
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity()
export class Task {
  @PrimaryGeneratedColumn()
  id: number;
  @Column()
  title: string;
  @Column()
  description: string;
  @Column({ default: 'OPEN' })
  status: string;
}

DTO (Validation):

在这里插入图片描述
在NestJS应用程序环境中,DTO(数据传输对象)起着与验证检查点类似的关键作用,可确保数据在遍历应用程序的不同组件时保持准确性和一致性。正如现实世界中的验证过程会仔细检查输入质量一样,DTO 充当验证器。

// create-task.dto.ts
import { IsNotEmpty, IsString } from 'class-validator';
export class CreateTaskDto {
  @IsNotEmpty()
  @IsString()
  title: string;

  @IsNotEmpty()
  @IsString()
  description: string;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

史一试

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值