Sobes.tech
Назад к вопросам
Junior — Middle
122

Можешь привести пример реализации принципа инверсии зависимостей в проектировании программных систем?

Ответ от нейросети

sobes.tech AI

Принцип инверсии зависимостей (Dependency Inversion Principle) заключается в том, что высокоуровневые модули не должны зависеть от низкоуровневых, а оба должны зависеть от абстракций (интерфейсов). В Node.js это можно реализовать через внедрение зависимостей (Dependency Injection).

Пример:

// Абстракция
class Logger {
  log(message) {
    throw new Error('Method not implemented');
  }
}

// Конкретная реализация
class ConsoleLogger extends Logger {
  log(message) {
    console.log(message);
  }
}

// Высокоуровневый модуль
class UserService {
  constructor(logger) {
    this.logger = logger; // зависимость через конструктор
  }

  createUser(name) {
    // логика создания пользователя
    this.logger.log(`User ${name} created`);
  }
}

// Использование
const logger = new ConsoleLogger();
const userService = new UserService(logger);
userService.createUser('Alice');

Здесь UserService зависит не от конкретного ConsoleLogger, а от абстракции Logger, что облегчает тестирование и замену реализации.