Модулі
Модуль - гэта клас, анатаваны дэкаратарам @Module()
. Дэкаратар @Module()
забяспечвае метаданыя, якія Nest выкарыстоўвае для арганізацыі структуры прыкладання.
Кожнае прыкладанне мае як мінімум адзін модуль, каранёвы модуль . Каранёвы модуль - гэта адпраўная кропка, якую Nest выкарыстоўвае для пабудовы графіка прыкладання - унутраная структура даных, якую Nest выкарыстоўвае для вырашэння адносін і залежнасцей модуля і пастаўшчыка. У той час як вельмі маленькія праграмы тэарэтычна могуць мець толькі каранёвы модуль, гэта не тыповы выпадак. Мы хочам падкрэсліць, што модулі настойліва рэкамендуюцца як эфектыўны спосаб арганізацыі кампанентаў. Такім чынам, для большасці прыкладанняў выніковая архітэктура будзе выкарыстоўваць некалькі модуляў, кожны з якіх змяшчае цесна звязаны набор магчымасцей .
Дэкаратар @Module()
прымае адзін аб'ект, уласцівасці якога апісваюць модуль:
providers | пастаўшчыкі, экзэмпляры якіх будуць створаны інжэктарам Nest і якія могуць быць агульнымі як мінімум для гэтага модуля |
controllers | набор кантролераў, вызначаных у гэтым модулі, якія павінны быць створаны |
imports | спіс імпартаваных модуляў, якія экспартуюць пастаўшчыкоў, неабходных у гэтым модулі |
exports | падмноства providers , якія забяспечваюцца гэтым модулем і павінны быць даступныя ў іншых модулях, якія імпартуюць гэты модуль. Вы можаце выкарыстоўваць альбо самога пастаўшчыка, альбо толькі яго маркер ( provide значэнне) |
Модуль інкапсулюе пастаўшчыкоў па змаўчанні. Гэта азначае, што немагчыма ўвесці пастаўшчыкоў, якія не з'яўляюцца непасрэдна часткай бягучага модуля і не экспартуюцца з імпартаваных модуляў. Такім чынам, вы можаце лічыць экспартаваныя пастаўшчыкі з модуля публічным інтэрфейсам модуля або API.
Функцыянальныя модулі
CatsController
і CatsService
належаць да аднаго дамена прыкладання. Паколькі яны цесна звязаны, мае сэнс перанесці іх у модуль функцый. Функцыянальны модуль проста арганізуе код, які адпавядае пэўнай функцыі, захоўваючы код у парадку і ўсталёўваючы дакладныя межы. Гэта дапамагае нам кіраваць складанасцю і развівацца па прынцыпах SOLID , асабліва па меры росту памеру прыкладання і/або каманды.
Каб прадэманстраваць гэта, мы створым CatsModule
.
@@filename(cats/cats.module)
import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
@Module({
controllers: [CatsController],
providers: [CatsService],
})
export class CatsModule {}
$ nest g module cats
.Вышэй мы вызначылі CatsModule
у файле cats.module.ts
і перамясцілі ўсё, што звязана з гэтым модулем, у каталог cats
. Апошняе, што нам трэба зрабіць, гэта імпартаваць гэты модуль у каранёвы модуль ( AppModule
, вызначаны ў файле app.module.ts
).
@@filename(app.module)
import { Module } from '@nestjs/common';
import { CatsModule } from './cats/cats.module';
@Module({
imports: [CatsModule],
})
export class AppModule {}
Вось як цяпер выглядае структура нашага каталога: