Estou planejando fazer uma palestra sobre Injeção de Dependência e IoC Containers, e estou procurando alguns bons argumentos para usá-lo.
Quais são os benefícios mais importantes do uso dessa técnica e dessas ferramentas?
Estou planejando fazer uma palestra sobre Injeção de Dependência e IoC Containers, e estou procurando alguns bons argumentos para usá-lo.
Quais são os benefícios mais importantes do uso dessa técnica e dessas ferramentas?
Respostas:
O mais importante, para mim, é facilitar o cumprimento do Princípio da Responsabilidade Única .
O DI / IoC simplifica o gerenciamento de dependências entre objetos. Por sua vez, isso facilita a quebra de funcionalidade coerente em seu próprio contrato (interface). Como resultado, meu código foi muito mais modularizado desde que aprendi sobre DI / IoC.
Outro resultado disso é que eu posso ver muito mais facilmente o caminho para um design que suporta o Princípio Aberto-Fechado . Essa é uma das técnicas mais inspiradoras de confiança (perdendo apenas para testes automatizados). Duvido que eu pudesse adotar as virtudes do Princípio Aberto-Fechado o suficiente.
O DI / IoC é uma das poucas coisas na minha carreira de programador que tem mudado o jogo. Existe uma enorme lacuna na qualidade entre o código que escrevi antes e depois de aprender DI / IoC. Deixe-me enfatizar isso um pouco mais. ENORME melhoria na qualidade do código.
Os exemplos que realmente abriram meus olhos foram ver como tornou possível testar com facilidade os objetos criados dessa maneira. Antes disso, tive problemas ao tentar isolar objetos para um teste de unidade. Eu costumava escrever testes para interagir com um sistema muito maior. Isso foi realmente difícil, porque o sistema como um todo era muito menos previsível e muito mais propenso a mudanças do que os componentes individuais.
As vantagens das injeções de dependência são:
Eu acho que os benefícios reais são mais políticos do que técnicos. O DI é simplesmente uma alternativa ao padrão do Localizador de Serviço , nada mais. Por si só, não facilita seguir princípios como SRP ou OCP, nem dissociar camadas. Outros entrevistados aqui estão confundindo diferentes conceitos e técnicas, IMO.
Você pode atingir os mesmos objetivos com relação à alta coesão e baixo acoplamento usando Localizadores de Serviço ou simplesmente instanciando dependências diretamente sempre que aplicável (o que é na maioria das vezes).
Agora, eu sei que muitos vão discordar dessa opinião. Ficarei feliz em discutir exemplos concretos.
Quando o DI é usado para expor objetos internos para fins de teste, o padrão foi abusado.