Sobes.tech
Junior — Middle

Pode explicar as diferenças entre o princípio de inversão de dependências e a injeção de dependências?

sobes.tech IA

Resposta da IA

Inversão de dependências (Princípio da inversão de dependências, DIP) — é um dos princípios SOLID, que afirma que:

  • Módulos de alto nível não devem depender de módulos de baixo nível. Ambos devem depender de abstrações.
  • Abstrações não devem depender de detalhes. Detalhes devem depender de abstrações.

Este é um princípio de design que visa reduzir o acoplamento e aumentar a flexibilidade do código.

Injeção de dependências (Dependency Injection, DI) — é um padrão ou técnica que implementa na prática o princípio de inversão de dependências. DI significa que as dependências (objetos necessários para o funcionamento de uma classe) são passadas de fora, em vez de serem criadas dentro da classe.

Exemplo:

protocol Service {
    func doSomething()
}

class RealService: Service {
    func doSomething() { print("Trabalho do serviço") }
}

class Client {
    let service: Service

    // Injeção de dependência através do construtor
    init(service: Service) {
        self.service = service
    }

    func execute() {
        service.doSomething()
    }
}

let service = RealService()
let client = Client(service: service)
client.execute()

Aqui, DIP é a ideia de que o Client depende da abstração Service, e não de uma implementação concreta RealService. DI é a forma de passar a implementação concreta para o Client de fora.

Resumindo:

  • DIP — princípio de design.
  • DI — forma de implementar esse princípio.