Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 22 additions & 7 deletions data/convert/be/modules.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Модуль - гэта клас, анатаваны дэкаратарам `@Module()` . Дэкаратар `@Module()` забяспечвае метаданыя, якія **Nest** выкарыстоўвае для арганізацыі структуры прыкладання.

<figure><img src="/assets/Modules_1.png"/></figure>
<figure><img src="/assets/Modules_1.png"></figure>

Кожнае прыкладанне мае як мінімум адзін модуль, **каранёвы модуль** . Каранёвы модуль - гэта адпраўная кропка, якую Nest выкарыстоўвае для пабудовы **графіка прыкладання** - унутраная структура даных, якую Nest выкарыстоўвае для вырашэння адносін і залежнасцей модуля і пастаўшчыка. У той час як вельмі маленькія праграмы тэарэтычна могуць мець толькі каранёвы модуль, гэта не тыповы выпадак. Мы хочам падкрэсліць, што модулі **настойліва** рэкамендуюцца як эфектыўны спосаб арганізацыі кампанентаў. Такім чынам, для большасці прыкладанняў выніковая архітэктура будзе выкарыстоўваць некалькі модуляў, кожны з якіх змяшчае цесна звязаны набор **магчымасцей** .

Expand Down Expand Up @@ -36,7 +36,10 @@ import { CatsService } from './cats.service';
export class CatsModule {}
```

:::info **Падказка** Каб стварыць модуль з дапамогай CLI, проста выканайце каманду `$ nest g module cats` .
:::info **Падказка**

Каб стварыць модуль з дапамогай CLI, проста выканайце каманду `$ nest g module cats` .

:::

Вышэй мы вызначылі `CatsModule` у файле `cats.module.ts` і перамясцілі ўсё, што звязана з гэтым модулем, у каталог `cats` . Апошняе, што нам трэба зрабіць, гэта імпартаваць гэты модуль у каранёвы модуль ( `AppModule` , вызначаны ў файле `app.module.ts` ).
Expand Down Expand Up @@ -80,7 +83,7 @@ export class AppModule {}

У Nest па змаўчанні модулі з'яўляюцца **адзінкавымі** , і таму вы можаце без асаблівых высілкаў абагульваць адзін і той жа асобнік любога пастаўшчыка паміж некалькімі модулямі.

<figure><img src="/assets/Shared_Module_1.png"/></figure>
<figure><img src="/assets/Shared_Module_1.png"></figure>

Кожны модуль аўтаматычна з'яўляецца **агульным модулем** . Пасля стварэння яго можна паўторна выкарыстоўваць любым модулем. Давайце ўявім, што мы хочам абагуліць асобнік `CatsService` паміж некалькімі іншымі модулямі. Каб зрабіць гэта, нам спачатку трэба **экспартаваць** пастаўшчыка `CatsService` , дадаўшы яго ў масіў `exports` модуля, як паказана ніжэй:

Expand Down Expand Up @@ -172,7 +175,10 @@ export class CatsModule {}

Дэкаратар `@Global()` робіць модуль глабальным. Глабальныя модулі павінны быць зарэгістраваны **толькі адзін раз** , як правіла, з дапамогай каранёвага або асноўнага модуля. У прыведзеным вышэй прыкладзе пастаўшчык `CatsService` будзе паўсюдным, і модулям, якія жадаюць укараніць службу, не трэба будзе імпартаваць `CatsModule` у свой масіў імпарту.

:::info **Падказка** Рабіць усё глабальным - не вельмі добрае дызайнерскае рашэнне. Глабальныя модулі даступныя для памяншэння колькасці неабходных шаблонаў. Масіў `imports` звычайна з'яўляецца пераважным спосабам зрабіць API модуля даступным для спажыўцоў.
:::info **Падказка**

Рабіць усё глабальным - не вельмі добрае дызайнерскае рашэнне. Глабальныя модулі даступныя для памяншэння колькасці неабходных шаблонаў. Масіў `imports` звычайна з'яўляецца пераважным спосабам зрабіць API модуля даступным для спажыўцоў.

:::

## Дынамічныя модулі
Expand Down Expand Up @@ -222,7 +228,10 @@ export class DatabaseModule {
}
```

:::info **Падказка** Метад `forRoot()` можа вяртаць дынамічны модуль альбо сінхронна, альбо асінхронна (напрыклад, праз `Promise` ).
:::info **Падказка**

Метад `forRoot()` можа вяртаць дынамічны модуль альбо сінхронна, альбо асінхронна (напрыклад, праз `Promise` ).

:::

Гэты модуль вызначае пастаўшчыка `Connection` па змаўчанні (у метададзеных дэкаратара `@Module()` ), але дадаткова - у залежнасці ад `entities` і `options` , перададзеных у метад `forRoot()` - паказвае калекцыю пастаўшчыкоў, напрыклад, рэпазітары. Звярніце ўвагу, што ўласцівасці, якія вяртае дынамічны модуль, **пашыраюць** (а не адмяняюць) метаданыя базавага модуля, вызначаныя ў дэкаратары `@Module()` . Такім чынам з модуля экспартуюцца як статычна заяўлены пастаўшчык `Connection` **, так і** дынамічна створаныя пастаўшчыкі рэпазітараў.
Expand All @@ -238,7 +247,10 @@ export class DatabaseModule {
}
```

:::warning **Папярэджанне** Як было сказана вышэй, рабіць усё глабальным **не з'яўляецца добрым дызайнерскім рашэннем** .
:::warning **Папярэджанне**

Як згадвалася вышэй, рабіць усё глабальным **- не вельмі добрае дызайнерскае рашэнне** .

:::

`DatabaseModule` можна імпартаваць і наладзіць наступным чынам:
Expand Down Expand Up @@ -270,5 +282,8 @@ export class AppModule {}

У раздзеле ["Дынамічныя модулі"](/fundamentals/dynamic-modules) гэтая тэма разглядаецца больш падрабязна і змяшчае [працоўны прыклад](https://github.com/nestjs/nest/tree/master/sample/25-dynamic-modules) .

:::info **Падказка** Даведайцеся, як ствараць наладжвальныя дынамічныя модулі з выкарыстаннем `ConfigurableModuleBuilder` тут, у [гэтай главе](/fundamentals/dynamic-modules#configurable-module-builder) .
:::info **Падказка**

Даведайцеся, як ствараць наладжвальныя дынамічныя модулі з выкарыстаннем `ConfigurableModuleBuilder` тут, у [гэтай главе](/fundamentals/dynamic-modules#configurable-module-builder) .

:::