Sobes.tech
Junior — Middle

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

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 alto nível não devem depender diretamente dos módulos de baixo nível, mas ambos devem depender de abstrações (por exemplo, interfaces). As abstrações não devem depender dos detalhes, mas os detalhes devem depender das abstrações. Isso ajuda a tornar a arquitetura mais flexível e facilmente extensível.

A injeção de dependências (Dependency Injection, DI) é um padrão ou técnica concreta que implementa o princípio de inversão de dependências. DI significa que as dependências de um objeto são passadas a ele de fora (por exemplo, através do construtor, um setter ou um método), em vez de serem criadas dentro do objeto. Isso facilita os testes e a substituição de componentes.

Em outras palavras:

  • DIP é uma regra ou princípio de design.
  • DI é uma forma de implementar esse princípio na prática.

Exemplo em Swift:

protocol NetworkService {
    func fetchData()
}

class APIService: NetworkService {
    func fetchData() {
        print("Buscando dados da API")
    }
}

class ViewModel {
    let networkService: NetworkService

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

    func load() {
        networkService.fetchData()
    }
}

let apiService = APIService()
let viewModel = ViewModel(networkService: apiService)
viewModel.load()