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` только при необходимости.