Dependency Inversion Principle
- Módulos de alto nível não devem depender de módulos de baixo nível; ambos devem depender de abstrações.
- As abstrações não devem depender de detalhes; os detalhes devem depender das abstrações.
Não é o mesmo que injeção de dependência
-
Alto nível
- Classes que descrevem o que o sistema deve fazer, mas não fazem a tarefa em si. Não entra nos detalhes.
-
Baixo nível
-
Abstrações
- É algo que representação uma ação, mas não contém detalhe sobre como isso tem que ser feito.
-
Detalhes
-
O objetivo do DIP é que alterações em uma parte do código não se propaguem em outros pontos.
-
Fica muito mais fácil de implementar porque você não precisa saber dos detalhes.
-
Evita a programação procedural.
-
Muito mais fácil evoluir, porque basta criar novas implementações para as interfaces.
-
Argumento contra:
- Não precisa de interface para tudo!
-
Introdução
- O Princípio de Inversão de Dependências (DIP) é um princípio de projeto de software que afirma que “classes de alto nível não devem depender de classes de baixo nível, ambas devem depender de abstrações”.
- O DIP é importante porque torna o código mais flexível, testável e fácil de manter.
- Existem três variações do DIP: DIP forte, DIP fraco e DIP de dependência.
-
Variações do DIP
- DIP forte: classes de alto nível não devem depender de classes de baixo nível.
- DIP fraco: classes de alto nível não devem depender de classes de implementação.
- DIP de dependência: classes de alto nível não devem depender de classes concretas.
-
Vantagens do DIP
- Flexibilidade: o DIP torna mais fácil alterar as classes de baixo nível sem afetar as classes de alto nível.
- Testabilidade: o DIP torna mais fácil testar as classes de alto nível, pois elas não dependem de classes de implementação.
- Manutenção: o DIP torna mais fácil manter o código, pois as classes de alto nível não dependem de classes concretas.
-
Implementação do DIP em código
- O DIP pode ser implementado em código usando abstrações, interfaces e herança.
-
Exemplo de implementação do DIP
- Um exemplo de implementação do DIP é uma classe
Clienteque depende de uma interfaceServicoDeEntrega. A classeServicoDeEntregaé abstrata e pode ser implementada por diferentes classes, comoServicoDeEntregaExpressoouServicoDeEntregaNormal.
- Um exemplo de implementação do DIP é uma classe
-
Conclusão
- O DIP é um princípio importante de projeto de software que pode ajudar a criar código mais flexível, testável e fácil de manter.
Referências
- Dev Eficiente (Diretor). (2023, agosto 11). Curso de SOLID: Uma visão pragmática sobre a aplicação do Princípio da Inversão da Dependência. https://www.youtube.com/watch?v=p19GJnerS18
- https://web.archive.org/web/20110714224327/http://www.objectmentor.com/resources/articles/dip.pdf