【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: A
	constructor() {
    
    
		this.a = new A("李四");
	}
}
class C {
    
    
	a: A
	constructor() {
    
    
		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: any
    constructor() {
    
    
        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程序设计、跨平台脚本开发、动态网页脚本技术等相关课程的教材。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_38951259/article/details/142870140