Nest.js中的设计模式——模块化

Nest是以模块作为应用组件进行开发的,开发时需要注重模块化的编程思想。

We want to emphasize that modules are strongly recommended as an effective way to organize your components.

我们要强调的是,强烈建议将模块作为组织组件的有效方式。

一个简单的Nest模块

Nest.js的模块化用到了面向对象(OOP)依赖注入(DI)的设计方法。

OOP编程

面向对象编程OOP三大要素:封装多态继承

封装就是把抽象的数据和对数据进行的操作封装在一起,意味着OOP也具有模块化的特点,只是封装的服务边界是对象内。

例如:

import {
    Cat } from './interfaces/cat.interface';

export class CatsService {
   
  private readonly cats: Cat[] = [];

  create(cat: Cat) {
   
    this.cats.push(cat);
  }

  findAll(): Cat[] {
   
    return this.cats;
  }
}

依赖注入

依赖注入(dependency injection,DI)的意思为,给予调用方它所需要的事物。

“依赖”是指可被方法调用的事物。依赖注入形式下,调用方不再直接使用“依赖”,取而代之是“注入” 。“注入”是指将“依赖”传递给调用方的过程。在“注入”之后,调用方才会调用该“依赖”。传递依赖给调用方,而不是让让调用方直接获得依赖,这个是该设计的根本需求。

上面讲到的依赖注入是一种控制反转 (IoC)技术,将依赖项的实例化委托给IoC 容器(NestJS中有自己的全局IoC容器)。

注册过程实际上就是取一个IoC容器的token(一般是类的名称),关联到依赖项(实例化对象),这是包含“依赖查找”和“依赖注入”的过程。如果没有找到“依赖项”,Nest将创建一个实例,缓存它,然后返回它,或者如果已经缓存了一个实例,则返回现有实例。

Nest中是如何实现的呢?先看看下面代码

// cat.service.ts
import {
    Injectable } from '@nestjs/common';
import {
    Cat } from './interfaces/cat.interface';

@Injectable() // 定义可注入到IoC的依赖项
export class CatsService {
   
  private readonly cats: Cat[] = [];

  create(cat: Cat) {
   
    this.cats.push(cat);
  }

  findAll(): Cat[] {
   
    return this.cats;
  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值