Sobes.tech
Junior — Middle

Podes dar um exemplo de implementação do princípio da inversão de dependências no projeto de sistemas de software?

sobes.tech IA

Resposta da IA

Принцип инверсии зависимостей (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, что облегчает тестирование и замену реализации.