当前位置: 首页 > news >正文

【Nestjs】从入门到精通(依赖注入)

在这里插入图片描述

NestJS 是一个基于 Node.js 的渐进式框架,构建在 Express 或 Fastify 之上,主要用于构建高效、可扩展的服务器端应用程序。它使用 TypeScript 并借鉴了 Angular 的设计理念,采用了依赖注入(IoC, Inversion of Control)的模式,这使得 NestJS 具有高度模块化和松耦合的特性。

在 NestJS 中,依赖注入(DI, Dependency Injection)是通过 IoC 容器实现的。这个 IoC 容器负责实例化和管理类的依赖关系,从而提高代码的灵活性和可维护性。

class A {name: string;constructor(name: string) {this.name = name;}
}
class B {a: Aconstructor() {this.a = new A("李四");}
}
class C {a: Aconstructor() {this.a = new A("王五");}
}
const b = new B();
console.log(b.a.name);  // 输出: 李四const c = new C();
console.log(c.a.name);  // 输出: 王五

这里B、C 高度依赖A,B、C实例化的同时会把A实例化,动作是B、C发出的。

使用中间件解耦实例

通过创建 Container 类来解耦实例,并通过 G 类从 Container 中获取这些实例。这是一种简单的依赖注入模式,常用于大型项目中,以保持模块之间的松耦合。

class E {name: string;constructor(name: string) {this.name = name;}
}class F {name: string | number;  // 保留原来的声明constructor(name: string | number) {this.name = name;}
}
//中间件用于解耦
class Container {modeuls: anyconstructor() {this.modeuls = {}}provide(key: string, modeuls: any) {this.modeuls[key] = modeuls}get(key) {return this.modeuls[key]}
}
const con = new Container();
con.provide("name", new E("张三"));
con.provide("age", new F(1));console.log(con.get("name"));  // 输出: E { name: '张三' }
console.log(con.get("age"));   // 输出: F { name: 1 }class  G {a:any;b:any;constructor(container:Container){this.a = con.get("name")this.b = con.get("age")}
}
const g = new G(con);
console.log(g)
//G { a: E { name: '张三' }, b: F { name: 1 } }

解释:

  • 通过 con.provide(“name”, new E(“张三”)),你将一个 E 的实例存储在 Container 中,并以 name 作为键。类似地,你通过 con.provide(“age”, new F(1)) 存储了 F 的实例。
  • 然后通过 con.get(“name”) 和 con.get(“age”) 可以取回这些实例。
  • G 类通过 container 对象获取 name 和 age 对应的实例,并将它们赋值给 a 和 b,从而保持类 G 与具体模块(E 和 F)之间的解耦。

总结:

这种设计模式利用 Container 类管理依赖,将 G 类与具体的模块类(E 和 F)解耦。这种模式可以让代码结构更清晰,模块间的依赖关系更松散,便于维护和扩展。

好书推荐

JavaScript前端开发与实例教程
JavaScript是开发Web前端必须掌握的编程语言,《JavaScript前端开发案例教程:微课视频版》以真实的项目需求为导向,循序渐进、深入浅出地讲解JavaScript开发技术。每章均由知识点讲解、案例实践、面试题和学科竞赛题四部分组成,并配套提供案例源代码、PPT课件、课后习题答案、微课视频、教案、教学大纲、课程实训、期末考试试卷、章节测试、实验报告、学习通共享课程、学科竞赛真题等丰富的教学资源。

《JavaScript前端开发案例教程:微课视频版》共分13章,主要内容包括JavaScript概述、语法基础、数组、函数、对象、DOM、事件处理、BOM、JavaScript特效综合实例、Ajax、基于Ajax+ECharts的天气预报系统、ES6、基于ES6的文创商城等,并提供了重污染天气预警、“2048”游戏、“渔夫打鱼晒网”程序设计、“扫雷”游戏、高亮显示关键词、留言板、折叠面板、浮现社会主义核心价值观内容、事件监听器、限时秒杀、电影购票、在线网盘、轮播图、网络购物车、放大镜等大量实例。

《JavaScript前端开发案例教程:微课视频版》适合JavaScript初学者、Web前端开发人员阅读,也可作为高等院校Web前端开发、JavaScript程序设计、跨平台脚本开发、动态网页脚本技术等相关课程的教材。
在这里插入图片描述

http://www.lryc.cn/news/462310.html

相关文章:

  • C语言函数
  • FLINK SQLTable API 的基本概念及常用API
  • Docker daemon.json配置参数及格式帮助信息
  • 十月编程语言排行榜~
  • 十三、行为型(策略模式)
  • Vue环境安装以及配置
  • Redis 数据类型hash(哈希)
  • 单一执行和循环执行的例行性工作
  • 单细胞分析 | Cicero+Signac 寻找顺式共可及网络
  • 人工智能创造出大量新型蛋白质
  • Palo Alto Networks Expedition 未授权SQL注入漏洞复现(CVE-2024-9465)
  • c 语言 sprintf
  • stm32单片机个人学习笔记10(TIM编码器接口)
  • 如何在Android中存储数据?
  • 13.3寸工业三防平板数字化工厂产线数采手持终端
  • ssh连接慢的问题或zookeeper远程连接服务超时
  • perf工具使用指导
  • WordPress 禁用上传媒体图片自动生成缩略图及多尺寸图片教程
  • 锥线性规划【分布鲁棒、两阶段鲁棒方向知识点】
  • linux环境下的程序设计与git操作
  • Matlab中HybridFcn参数的用法
  • Leetcode 3316. Find Maximum Removals From Source String
  • jeecg3版本的vue,离线启动
  • C++的内存管理
  • YZ系列工具之YZ09:VBA_Excel之读心术
  • 嵌入式系统---看门狗
  • 从MySQL5.7迁移到8.0时,有哪些重要的参数调整或新参数需要注意?
  • 完整发布/上传uniapp Ios应用到App Store流程
  • CodeActAgent :Executable Code Actions Elicit Better LLM Agents解读
  • 中小型医院网站开发:Spring Boot入门