nestjs学习 - 前置知识

0 阅读3分钟

在学习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 优缺点:

优点:

  1. 降低耦合度:对象不再自己创建依赖,而是由外部提供;
  2. 更容易测试:可以轻松注入 mock 对象;
  3. 更灵活扩展:可以替换依赖实现,而不改动业务代码;
  4. 更好维护性:对象之间关系清晰,由容器统一管理。
  5. 更好分割功能:有利于关注点分离与扩展。

缺点:

  1. 增加学习成本、过度设计会复杂、调试时依赖链隐式化可能不直观。