Qadam Roadmap
проектdocs/Agents/rules/patterns-dependency-injection.md

patterns-dependency-injection.md

Обновлён 1 апр. 2026 г., 12:41 · 0 комментариев


title: Use NestJS Dependency Injection impact: HIGH impactDescription: Enables testability, loose coupling, and maintainability tags: patterns, dependency-injection, nestjs, testing

Паспорт документа

  • Статус документа: living standard
  • Актуально на: 28 марта 2026 года
  • Владелец: backend/platform-команда
  • Пересмотр: при изменении инженерной практики, CI/CD, архитектурных правил или локального workflow
  • Область применения: внутренние rule/reference-card документы для инженерной команды
  • Связанные документы:

Use NestJS Dependency Injection

Impact: HIGH

All services, repositories, and providers are managed by NestJS DI container. Never instantiate classes manually.

Incorrect (manual instantiation):

@Injectable()
export class ItemService {
  private repo = new ItemRepository(new PrismaService()); // Wrong!
  private cache = new CacheService(new RedisService());    // Wrong!
}

Correct (constructor injection):

@Injectable()
export class ItemService {
  constructor(
    private readonly itemRepo: ItemRepository,
    private readonly cache: CacheService,
  ) {}
}

// Module registers providers
@Module({
  imports: [PrismaModule, RedisModule],
  controllers: [ItemController],
  providers: [ItemService, ItemRepository],
  exports: [ItemService],
})
export class ItemModule {}

Testing Benefits

DI makes mocking trivial:

const module = await Test.createTestingModule({
  providers: [
    ItemService,
    { provide: ItemRepository, useValue: mockRepository },
    { provide: CacheService, useValue: mockCache },
  ],
}).compile();

Rules

  • All classes that need dependencies use @Injectable() decorator
  • Dependencies injected via constructor
  • Module providers array declares what's available
  • Module exports array declares what other modules can use
  • Use interfaces for repositories when you want to swap implementations
  • Never use new to create injected services