4、Nest.js 中的模塊化設計

什么是模塊化?

模塊化是指解決一個復雜問題時自頂向下逐層把系統劃分成若干模塊的過程,有多種屬性,分別反映其內部特性。

假設我們現在需要開發一個商城系統。

可以初步把它劃分為下面這樣的多個子系統:

  • 商品管理
  • 用戶管理
  • 物流管理
  • 權限管理

等等......

用戶管理 又可以繼續細分

  • 基本信息管理
  • 會員等級管理

等等 ... ...

一個復雜的商城系統就可以用類似的方式拆分成不同的模塊,自頂向下,逐步細化。

Nest 中的模塊化

對應到我們的 Nest 項目中商城系統就是 AppModule

AppModule 就是整個系統的根模塊,其它子模塊都掛載到這個根模塊上,形成一顆樹形結構。

目前我們的 UsersController 是直接掛載到了根模塊,更標準的做法就是我們需要新建一個 UsersModule,
讓 UsersController 掛載到 UsersModule 上,然后把 UsersModule 掛載到 AppModule 根模塊,下面我們就來新建一個 UsersModule:

$ nest g mo users

CREATE /src/users/users.module.ts (82 bytes)
UPDATE /src/app.module.ts (798 bytes)

生成的代碼像下面這樣:

src/users/users.module.ts

import { Module } from '@nestjs/common';

@Module({})
export class UsersModule {}

我們需要把 AppModule 中對 UsersController 和 UsersService 的導入移植到 UsersModule 中,并把 UsersModule 導入到 AppModule,現在它們看起來像下面這樣:

src/app.module.ts

import { Module } from '@nestjs/common';
import { AppController } from 'app.controller';
import { AppService } from 'app.service';
import { UsersModule } from './users/users.module';

@Module({
  imports: [UsersModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule { }

src/users/users.module.ts

import { Module } from '@nestjs/common';
import { UsersController } from './users.controller';
import { UsersService } from './services/users.service';

@Module({
    controllers: [UsersController],
    providers: [UsersService],
})
export class UsersModule {}

我們在 AppModule 的 @Module 裝飾器中使用 imports 指定導入 UsersModule,
然后在 UsersModule 中的 @Module 裝飾中重新導入了 UsersController 和 UsersService。

訪問 http://127.0.0.1:3000/users/33 發現框架依然工作的很好:

{"id":"33","name":"小明","age":18}

本篇只介紹 Nest.js 最基本的模塊化設計,后面的教程將會涉及到更高級的模塊用法。

上一篇:3、Nest.js 中的依賴注入與提供者
下一篇:5、Nest.js 中的異常處理和AOP編程

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 模塊通常是指編程語言所提供的代碼組織機制,利用此機制可將程序拆解為獨立且通用的代碼單元。所謂模塊化主要是解決代碼分...
    一個敲代碼的前端妹子閱讀 1,978評論 8 23
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,076評論 25 708
  • 在我年紀小的時候,至少在我年紀比現在小的時候,總是愛和好的玩伴坐在一起,吃在一起,學在一起,到了現在,習慣了一個人...
    dare且聽風吟閱讀 444評論 1 2
  • 在我們工作中“作戰指揮室”也就是我們開會交接的地方,每個月進行幾次兩員總結或者有什么好的方法趕銷售等都是在作戰指揮...
    Ding欣欣閱讀 190評論 0 0
  • 無暇告別 有些事情如果精心認真,結果總是很喜出望外,酸菜在缸里呆上一個半月,撈出來時候樣子樸實干凈,吃起來又酸又脆...
    小福吼吼閱讀 228評論 0 3