浅谈一下NestJs后端框架的依赖注入
NestJS
简介
Architecture Nest provides an out-of-the-box application architecture which allows developers and teams to create highly testable, scalable, loosely coupled, and easily maintainable applications. The architecture is heavily inspired by Angular. nestJs是重架构的
依赖注入
nest 框架和后端同学使用的 Springboot 以及前端三大框架之一的 Angular 都有很多相似之处。没错这三个框架都有相似的设计,并都实现了依赖注入。
- **依赖倒置原则(DIP):**抽象不应该依赖实现,实现也不应该依赖实现,实现应该依赖抽象。
- 依赖注入(dependency injection,简写为 DI):依赖是指依靠某种东西来获得支持。将创建对象的任务转移给其他class,并直接使用依赖项的过程,被称为“依赖项注入”。
- 控制反转(Inversion of Control, 简写为 IoC):指一个类不应静态配置其依赖项,应由其他一些类从外部进行配置。
其实 DI 和 IoC 是实现依赖倒置原则的具体手段。
依赖注入在angular中的使用(nestjs参考了angular)
在 Angular 中大量应用了依赖注入的设计思想。Angular 使用依赖注入来管理应用的各个部分之间的依赖关系,以及如何将这些依赖关系注入到应用中,例如你可以使用依赖注入来注入服务、组件、指令、管道等。
比我们可以使用 Injectable 将其指定为可注入对象。
依赖注入的三种方式
在 nest 中采用了第一种方式——构造器注入。
- 构造器注入: 依赖关系通过 class 构造器提供;(nest选择的)
- setter 注入: 用 setter 方法注入依赖项;
- 接口注入: 依赖项提供一个注入方法,该方法将把依赖项注入到传递给它的任何客户端中。客户端必须实现一个接口,该接口的 setter 方法接收依赖;
两个优点
- 减少样板代码,不需要再在业务代码中写大量实例化对象的代码了;
- 可读性和可维护性更高了,松耦合,高内聚,符合单一职责原则,一个类应该专注于履行其职责,而不是创建履行这些职责所需的对象。