Sobes.tech
Junior — Middle

Pode explicar as diferenças entre os conceitos de Injeção de Dependências e Inversão de Dependências no contexto do desenvolvimento de software?

sobes.tech IA

Resposta da IA

Injeção de Dependências (DI) — é um padrão de projeto em que as dependências de um objeto são passadas de fora, em vez de serem criadas internamente. Isso permite alterar facilmente as implementações das dependências, simplifica os testes e aumenta a modularidade do código.

Princípio da Inversão de Dependências (DIP) — um dos cinco 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.

Simplificando, o DIP visa reduzir o acoplamento entre componentes usando abstrações (por exemplo, interfaces).

Relação entre eles: DI é uma forma de implementar o DIP. Usando DI, passamos as dependências através do construtor ou setters, permitindo que os módulos dependam de abstrações, não de implementações concretas.

Exemplo em Swift:

protocol NetworkService {
    func fetchData()
}

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

class ViewModel {
    private let networkService: NetworkService

    // Injeção de Dependência via construtor
    init(networkService: NetworkService) {
        self.networkService = networkService
    }

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

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

Aqui, o ViewModel depende da abstração NetworkService (DIP), e a implementação concreta é passada de fora (DI).