Sobes.tech
Back to questions
Middle — Middle+
83

Каким образом принцип полиморфизма реализован в фреймворке NestJS и как он используется для расширения функциональности?

Answer from AI

sobes.tech AI

В NestJS принцип полиморфизма реализован через использование абстракций, интерфейсов и внедрение зависимостей (Dependency Injection). Это позволяет создавать расширяемые и заменяемые компоненты.

Например, можно определить общий интерфейс или абстрактный класс для сервиса, а затем реализовать несколько конкретных версий этого сервиса. В зависимости от конфигурации или контекста NestJS будет инжектировать нужную реализацию.

Это используется для расширения функциональности, когда нужно заменить или дополнить поведение без изменения существующего кода. Также полиморфизм проявляется в использовании декораторов и middleware, которые могут обрабатывать разные типы данных или запросов единообразно.

Пример:

// Интерфейс
export interface PaymentService {
  pay(amount: number): Promise<boolean>;
}

// Реализация для PayPal
@Injectable()
export class PaypalService implements PaymentService {
  async pay(amount: number) {
    // логика оплаты через PayPal
    return true;
  }
}

// Реализация для Stripe
@Injectable()
export class StripeService implements PaymentService {
  async pay(amount: number) {
    // логика оплаты через Stripe
    return true;
  }
}

// В модуле можно выбрать, какую реализацию использовать
@Module({
  providers: [
    {
      provide: PaymentService,
      useClass: PaypalService, // или StripeService
    },
  ],
})
export class PaymentModule {}

Таким образом, NestJS позволяет легко расширять и заменять функциональность через полиморфизм и DI.