Nest框架之IOC

前言


🤡Nest中有着一个很特别的概念那就是IOC,我们在koa或者Express中完全没有听说过这个概念,IOC是Inversion of Control(控制反转)的缩写,是一种软件设计原则和编程模式。在IOC中,控制权的转移是发生在对象之间的依赖关系中,简而言之就是,之前对象之间的依赖关系之前由你按照使用的先后顺序进行互相引入,现在更改为了由你声明,容器自动为你组装,就相当于本来控制权在你这,但是现在控制权变成了代码自动做了,这就是控制反转。

一.后端系统的痛点


🫥试想一下,你在进行后端系统开发的时候,你的controller对象依赖你的services来提供数据,也就是需要先等到这个对象的数据获取到才能进行其他的操作,你的services依赖Repository进行数据库的查询,那么这样问题就发生了,加入这样的情况有很多那么我们都要自己手动去声明然后使用吗?

ts 复制代码
const repository = new Repository(dataSource);

const service = new Service(repository);

const controller = new Controller(service);

我们可以发现如果像上述的这种方式去进行对象的组装和使用会非常的麻烦并且不利于维护,既然有痛点就会有人想要解决它,解决这个问题的方式就是IOC其实这个概念在其他语言的框架中并不是一个陌生的概念,当然Nest中实现了IOC。

二.Nest中的模块依赖


🤡首先我们看下Nest项目的基本结构,以及不同模块的依赖关系,首先Nest中有很多的模块,比如用户模块,信息模块,购买模块等等,每个模块都会有自己的controller services等具体的模块层级,其中controller依赖services最后两者又通过Module进行管理,不同的模块又一起在AppModule中引入,在main.ts中进行启动。

🐻在controller中进行依赖声明的方式大概有两种,一种是构造函数声明方式,另外一种是属性声明方式,这两种依赖声明的方式效果是一样的,当我们声明后就能够直接使用声明的对象了,容器会帮我们自动组装依赖。

  1. 属性的声明方式
  1. 构造函数声明方式

三.剖析Nest模块的依赖


🥱我们使用命令生成一个完整的模块

ts 复制代码
nest g resource user

生成的模块内容如下,我们可以看到包含,controller services等等以及一些spec结尾的测试文件。

🫥首先我们看下模块文件,我们可以看到controllersproviders两个选项,其中第一个选项是只能进行注入的对象,一般就是对应的controller层的对象,另外一个是既可以被注入也可以注入其他的一般就是services层的对象内容。

🥱我们看下controller对应的文件内容,其中controller装饰器表示这个是controller层并且可被注入的类,Inject装饰器表示一个"注入"的动作,这里也可以使用构造函数的方式进行注入,上面已经介绍过就不再赘述。

🤡controller又依赖了services来获取数据,上边在controller中注入的就是services的对象

四.总结


🫥后端系统中解决模块对象间的依赖关系是一个非常复杂的问题,非常棘手,但是IOC解决了这个问题,通过使用者声明依赖,让容器自动进行组装,这样就解决了依赖之间复杂难以维护的问题,IOC是Nest中非常重要的概念我们无时无刻不再享受这种方式所带来的利好。

相关推荐
狂炫冰美式7 分钟前
《预言市场进化论:从罗马斗兽场,到 Polymarket 的 K 线图》
前端·后端
hahjee23 分钟前
Go编写的ANSI终端颜色和样式控制库在OpenHarmony PC上的完整适配实战
开发语言·后端·鸿蒙
小火锅啊43 分钟前
java实现生成PDF文件
后端
老华带你飞1 小时前
健身房预约|基于springboot 健身房预约小程序系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·小程序
paopaokaka_luck1 小时前
基于SpringBoot+Uniapp的自习室预约小程序(腾讯地图API、Echarts图形化分析、二维码识别)
vue.js·spring boot·后端·spring·echarts
树洞RoBot1 小时前
Spring框架深度解析:从核心原理到企业级实战
后端
..过云雨1 小时前
15-2.【Linux系统编程】进程信号 - 信号保存(信号处理流程的三种状态:未决、阻塞、递达,信号保存由未决表完成、sigset_t信号集类型及相关函数)
linux·c++·后端·信号处理
喵个咪1 小时前
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:Makefile 在后端开发中的应用与 Windows 环境配置
后端·go
LaoZhangAI1 小时前
Gemini图像生成宽高比教程:10种比例完整配置指南【2025】
前端·后端
猫猫不是喵喵.1 小时前
使用poi通过word模板导出数据
后端