2 nestjs 设计模式

news2024/11/25 14:08:43

请添加图片描述

回顾 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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么牌子的开放式耳机性价比高?五款高口碑精品推荐!

由于传统入耳式耳机可能对耳道健康造成长期影响,许多人开始偏好选择开放式耳机的非侵入式设计。这种耳机有助于减少耳内湿润、细菌增长,以及耳道闷热的不适感。为了帮助大家在众多产品中挑选合适的开放式耳机,我将列举一些市场反馈良好的款式…

C#中的WebClient与XPath:实现精准高效的Screen Scraping

在现代互联网中,Screen Scraping(屏幕抓取)已成为从网页中提取信息的重要技术。对于C#开发者来说,WebClient和XPath是实现高效抓取的重要工具。本文将概述如何使用C#中的WebClient类结合XPath技术,实现精准高效的Scree…

探索科技潮流新领地厦门凯酷全科技有限公司抖音小店

在这个日新月异的数字时代,科技不仅深刻改变了我们的生活方式,更成为连接消费者与未来生活的桥梁。今天,就让我们一起走进厦门凯酷全科技有限公司的抖音小店,感受一场科技与时尚的完美碰撞,体验未来生活触手可及的魅力…

Python 和 PyCharm 安装(傻瓜式)

为什么要安装Python? 当我们写 python 代码的时候,需要有环境的支持,才可以运行代码。而 python 的安装支持了两个主要部分,分别是解释器和标准库。当我们安装完成,就可以使用python里面的标准库来写代码,而…

Linux 内核源码分析---netfilter 框架

iptables是用户用来管理和配置防火墙规则的一种策略,但是实际解析规则并按照规则实施产生作用的是Netfilter。 iptables 与协议栈内有包过滤功能的 hook 交互来完成工作,这些内核 hook 构成了 netfilter 框架。每个进入网络系统的包(接收和发…

Java Web —— 第七天(Mybatis案例 员工管理2)

新增员工 EmpController类 PostMappingpublic Result save(RequestBody Emp emp){log.info("新增员工操作,emp:{}",emp);empService.save(emp);return Result.success();} EmpServiceImpl实现类 //新增员工Overridepublic void save(Emp emp) {//补充基础属性 创…

jmeter中添加ip欺骗

1、首先在本机电脑中通过配置文件创建添加ip的配置文件,先创建一个txt格式的,直接修改文件名以及后缀为ips.bat 2、编辑该ips.bat文件,在文件中输入如下内容,用于快速给本机添加ip地址,(2,1&…

今年奥运会的场馆设计,竟然藏着这样的黑科技!

随着奥运会的盛大开幕,全球观众不仅关注运动员的精彩表现,也被奥运场馆的壮丽设计所吸引。这些场馆不仅外观炫酷,功能齐全,更重要的是背后应用了一系列先进的技术和材料,其中最为亮眼的就是巴黎奥运会永久性体育场馆之…

“救命快刊”:升到2区,IF3.1,水平低也无俱,专家意见中肯不难为人

1、期刊简介: International Journal of Green Energy • 出版社:Taylor and Francis • 影响因子:3.1 • 期刊分区:JCR2/3区,中科院4区 • 检索数据库:SCI&EI 2、研究领域: 分享了能源…

开源好用的堡垒机工具Jumpserver

Jumpserver是一个由杭州飞致云信息科技有限公司(FIT2CLOUD飞致云)开发的开源堡垒机系统,旨在帮助企业构建和强化运维安全审计能力。 以下是关于Jumpserver的详细介绍: 一、基本概述 定义:Jumpserver是一个开源的堡垒…

CTFshow之RCE代码命令远程执行第53关到第64关详细讲解。可私信!

手眼通天和大人。 --真锅和 引言:今天继续ctf之旅!!解决53关到64关 ps:今天是8.22,重新回归开始填坑,先发个废品 一、实验准备 1、ctf网址:ctf.show 2、工具:fi…

cmd发送邮件:如何通过命令提示符发邮件?

cmd发送邮件的安全性考量?如何设置cmd发送邮件? 通过命令提示符发送邮件则提供了一种便捷且高效的方法,特别是在自动化任务和脚本化工作流程中。AokSend将介绍如何通过命令提示符实现发送邮件,并讨论其应用场景和注意事项。 cmd…

上线一天销售额超15亿!《黑神话:悟空》火爆全网的技术秘诀!

昨日(8月20日)上午,国产游戏《黑神话:悟空》正式发售,在全球游戏市场掀起巨大狂潮!上线第一天在Steam的PCCU(同时在线用户数峰值)排名已成为第三! 此款游戏上线即回本。…

Stable Diffusion【应用篇】【艺术写真】:超高相似度人物换脸写真,IP-Adapter与InstantID完美结合

艺术写真,以其独特的魅力,吸引了无数艺术爱好者和摄影爱好者。如今,借助Stable Diffusion的IP-Adapter和InstantID技术,你只需一键操作,就能轻松实现超高相似度的人物换脸写真。本文将带你深入了解Stable Diffusion的I…

如何建立Pod

文章目录 一、Pod的生命周期建立pod1. 提交 Pod 定义2. API 服务器处理3. 调度4. 节点准备5. 容器初始化6. 启动应用容器7. 持续管理 Pod结束Pod的探针1. 存活探针(Liveness Probe)2. 就绪探针(Readiness Probe)3. 启动探针&#…

Transformer微调实战:通过低秩分解(LoRA)对T5模型进行微调(LoRA Fine Tune)

scient scient一个用python实现科学计算相关算法的包,包括自然语言、图像、神经网络、优化算法、机器学习、图计算等模块。 scient源码和编译安装包可以在Python package index获取。 The source code and binary installers for the latest released version ar…

思博伦仪表打流测试使用总结

下载安装包: 打开浏览器地址:http://192.168.6.244欢迎来到思博伦TestCenterhttp://192.168.6.244 点击下图中红框中的链接: 打开安装包,并按照提示按照即可。 1,仪表口使用 选择并占用测试仪端口在客户端软件的初始界面,点击红框中的链接:

智慧公厕系统在旅游景区的应用前景

在科技飞速发展的当今时代,智慧公厕系统正逐渐成为旅游景区提升服务品质的新亮点。它以先进的技术和创新的理念,为游客带来全新的如厕体验,同时也为景区的管理带来了诸多便利,展现出广阔的应用前景。 一、智慧公厕系统为游客带来的…

CompletableFuture.allOf().get()引起的线程池死锁

CompletableFuture<Void> voidCompletableFuture CompletableFuture.allOf(completableFutures);可以同步等待一组异步请求都返回结果后&#xff0c;再往下执行。voidCompletableFuture.get()会同步等待所有结果返回&#xff0c;并且不会超时。就因为没有设置超时时间&a…

深入浅出,探讨IM(即时通讯-聊天工具)技术架构及用户界面设计

在数字化时代的浪潮中&#xff0c;即时通讯&#xff08;IM&#xff09;工具已然成为人们日常沟通的重要方式。从微信、QQ到飞信钉、喧喧IM、企业微信、钉钉、Slack&#xff0c;这些IM工具不仅为我们提供了便捷的沟通方式&#xff0c;更在技术架构和用户界面设计上展现了独特的魅…