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.