Quais são os benefícios de usar Injeção de Dependência e Contêineres IoC?

59

Estou planejando fazer uma palestra sobre Dependency Injection e IoC Containers, e estou procurando alguns bons argumentos para usá-lo.

Quais são os benefícios mais importantes de usar essa técnica e essas ferramentas?

    
por Andy Lowry 16.11.2010 / 00:26
fonte

5 respostas

42

O mais importante, para mim, é tornar mais fácil seguir o Princípio da Responsabilidade Única .

DI / IoC torna simples para mim gerenciar dependências entre objetos. Por sua vez, isso facilita para mim a funcionalidade coerente em seu próprio contrato (interface). Como resultado, meu código tem sido muito mais modularizado desde que eu aprendi sobre DI / IoC.

Outro resultado disso é que eu posso ver muito mais facilmente meu caminho até um design que suporte o Princípio Aberto-Fechado . Essa é uma das técnicas inspiradoras de confiança (perdendo apenas para testes automatizados). Eu duvido que eu poderia adotar as virtudes do Princípio Aberto-Fechado o suficiente.

DI / IoC é uma das poucas coisas na minha carreira de programação que tem sido uma "mudança de jogo". Existe uma lacuna enorme na qualidade entre o código que escrevi antes & depois de aprender DI / IoC. Deixe-me enfatizar isso um pouco mais. Melhoria ENORME da qualidade do código.

    
por 16.11.2010 / 00:30
fonte
8

Os exemplos que realmente abriram meus olhos foram ver como isso tornou possível testar facilmente os objetos criados dessa maneira. Antes disso, tive dificuldade em tentar isolar objetos para um teste de unidade. Eu costumava escrever testes para interagir com um sistema muito maior. Isso foi muito difícil porque o sistema como um todo era muito menos previsível e muito mais propenso a mudar do que os componentes individuais.

    
por 16.11.2010 / 05:16
fonte
2

As vantagens das injeções de dependência são:

  1. Seu código está limpo e mais legível.
  2. Os códigos são fracamente acoplados.
  3. Mais reutilizável conforme as implementações são configuradas no arquivo XML, pode ser usado em um contexto diferente.
  4. O código pode ser facilmente testado com diferentes implementações simuladas.
por 20.04.2016 / 04:50
fonte
1

Acho que os benefícios reais são mais políticos do que técnicos. DI é simplesmente uma alternativa ao padrão Service Locator , nada mais. Por si só, não facilita seguir princípios como o SRP ou o OCP, ou dissociar camadas. Outros entrevistados aqui estão confundindo diferentes conceitos e técnicas, IMO.

Você pode atingir os mesmos objetivos com respeito a alta coesão e baixo acoplamento usando Localizadores de Serviço ou simplesmente instanciando dependências diretamente sempre que aplicável (o que é na maior parte do tempo).

Agora, sei que muitos discordarão dessa opinião. Terei prazer em discutir exemplos concretos.

    
por 15.12.2010 / 17:07
fonte
-1

Quando a DI é usada para expor objetos internos com o propósito de testar, o padrão foi abusado.

    
por 02.08.2012 / 11:30
fonte