Sobes.tech
Junior — Middle

Pode explicar o princípio da inversão de dependências e como ele é aplicado no design de sistemas de software?

sobes.tech IA

Resposta da IA

O princípio da inversão de dependências (Dependency Inversion Principle, DIP) é um dos cinco princípios SOLID, que afirma que:

  • Os módulos de nível superior não devem depender de módulos de nível inferior. Ambos devem depender de abstrações.
  • As abstrações não devem depender dos detalhes. Os detalhes devem depender das abstrações.

Isto significa que, em vez de criar e usar diretamente classes ou módulos específicos, trabalhamos através de interfaces ou classes abstratas. Isto aumenta a flexibilidade e facilita os testes e a manutenção do código.

No projeto de sistemas de software, isto aplica-se assim:

  • Os componentes dependem de interfaces, não de implementações concretas.
  • As implementações podem ser alteradas sem modificar o código que as utiliza.
  • Permite injetar dependências através de construtores, setters ou fábricas (Injeção de Dependências).

Exemplo em Node.js:

// Abstração
class Logger {
  log(message) {
    throw new Error('Não implementado');
  }
}

// Implementação concreta
class ConsoleLogger extends Logger {
  log(message) {
    console.log(message);
  }
}

// Classe que depende da abstração
class UserService {
  constructor(logger) {
    this.logger = logger;
  }

  createUser(name) {
    // lógica de criação de usuário
    this.logger.log(`Usuário ${name} criado`);
  }
}

const logger = new ConsoleLogger();
const userService = new UserService(logger);
userService.createUser('Alice');

Aqui, UserService depende da abstração Logger, não de ConsoleLogger em particular. Isto permite substituir facilmente o logger por outro, por exemplo, para registar num ficheiro, sem modificar o UserService.