intermediate

NestJS modules

Организуйте features через modules, imports, exports, dynamic modules, shared providers и explicit application boundaries.

Modules — единицы композиции NestJS с декоратором `@Module()`. Объявляют `controllers`, `providers`, `imports` (другие modules) и `exports` (providers для импортёров). Root `AppModule` собирает граф приложения.

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

Feature modules инкапсулируют bounded context. Shared modules экспортируют cross-cutting providers (config, logging). Dynamic modules (`forRoot`, `forRootAsync`) принимают конфигурацию при bootstrap — типично для database и auth.

На интервью: границы module vs структура папок, что `exports` контролирует в DI graph, когда уместен `@Global()` — редко.

Типовые ошибки: circular imports между modules, глобальный export всего, god modules с несвязанными фичами.

Компромисс — между простотой, производительностью, безопасностью и эксплуатацией: назовите, что оптимизировали и какую цену приняли.

Чеклист:

  • Feature module на bounded context.
  • Export только нужных providers.
  • Dynamic modules для настраиваемой инфраструктуры.
  • `forwardRef` только при необходимости.