intermediate
NestJS providers
Моделируйте injectable services, repositories, factories, tokens, scopes и lifecycle hooks, не скрывая domain boundaries.
Providers — injectable classes (или values/factories) в `providers` модуля. `@Injectable()` помечает class для DI. Services, repositories и adapters — типичные providers.
@Injectable()
export class UsersService {
constructor(private readonly repo: UsersRepository) {}
async create(dto: CreateUserDto) {
return this.repo.save(dto);
}
}
Custom providers: `useClass`, `useValue`, `useFactory` и injection tokens для interfaces. Scope по умолчанию — singleton на module; `Scope.REQUEST` — instance на HTTP request; использовать осторожно из-за стоимости.
На интервью: lifetime provider, когда factories лучше classes, как repositories скрывают persistence от services.
Типовые ошибки: request-scoped providers везде, один provider в нескольких modules без export, services со знанием HTTP.
Компромисс — между простотой, производительностью, безопасностью и эксплуатацией: назовите, что оптимизировали и какую цену приняли.
Чеклист:
- Domain services с `@Injectable()`.
- Persistence за repository providers.
- Singleton scope, если не нужен request context.
- Tokens для interface → implementation.