在学习nestjs之前,我们需要先了解一些基础概念,磨刀不误砍柴工,理解了这些概念能让我们更好的学习nestjs;
-
ES6+
- class类
- 装饰器
- Module
-
TypeScript
-
nodejs基础,npm
-
Express / Fastify
-
IoC / DI 思想
-
OOP(面向对象编程)、FP(面向切面编程)、FRP(函数式响应编程)
前面三个应该是前端开发必备的基础知识,不过多介绍。
Express / Fastify 大家自行学习了解,应为范围太大;
本文主要介绍一下 IoC / DI 思想
IOC(控制反转) / DI(依赖注入)
控制反转(英语:Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。
其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。
所以 DI(依赖注入) 是实现 IOC 的其中一种方式;
概念速览(用一句话)
- IOC(Inversion of Control,控制反转) :把对象创建/控制的权力从组件本身移交给外部容器/框架。组件不再自己 new 依赖,而由外部负责提供。
- DI(Dependency Injection,依赖注入) :实现 IOC 的一种方式。容器在创建对象时把它需要的依赖“注入”进去(通过构造器、属性、或方法)。
官网描述:
依赖注入是一种控制反转(IoC)技术,其中您将依赖项的实例化委托给IoC容器(在我们的情况下,就是NestJS运行时系统),而不是在您自己的代码中命令式地完成。
1. IoC 是什么
控制反转(IoC,Inversion of Control) 是一种设计思想,不是某种具体技术。 它的核心理念是:把“控制对象创建和依赖的权力”,从程序员手中交给框架或容器去管理。
程序员拥有:控制对象创建和依赖的权利反转
框架或容器去管理
2. IoC 之 NestJS
NestJS 的 IoC 核心:依赖注入容器(DI Container)
在 NestJS 中,IoC 是通过内置的依赖注入容器(Dependency Injection Container)实现的。
容器的职责就是:
自动识别、创建和注入依赖对象。
整个应用启动时,NestJS 会扫描所有模块(Module), 找到标记了 @Injectable()、@Controller()、@Module() 的类, 并将它们注册进 IoC 容器中。
IoC 优缺点:
优点:
- 降低耦合度:对象不再自己创建依赖,而是由外部提供;
- 更容易测试:可以轻松注入 mock 对象;
- 更灵活扩展:可以替换依赖实现,而不改动业务代码;
- 更好维护性:对象之间关系清晰,由容器统一管理。
- 更好分割功能:有利于关注点分离与扩展。
缺点:
- 增加学习成本、过度设计会复杂、调试时依赖链隐式化可能不直观。