Estive estudando o uso da estrutura Typhoon para injeção de dependência nesta semana. Entendo que a separação da construção de objetos é benéfica para a substituição de componentes arbitrários por simulações durante o teste de unidade, e até agora já vi benefícios apenas com isso.
Mas não posso deixar de pensar que, onde antes eu tinha uma classe de controlador de exibição enorme que tinha dezenas de importações de cabeçalho, agora tenho uma classe de fábrica enorme que tem dezenas de importações de cabeçalho. Devo evitar ter uma aula massiva de fábrica?
dependency-injection
Vencedor
fonte
fonte
Respostas:
A Injeção de Dependência simplesmente ajuda a definir como um objeto sabe sobre outro objeto dependente. Isso não ajudará a reduzir a complexidade geral do sistema. Se você precisou de dezenas de importações antes do DI, ainda precisará de dezenas de importações depois. A diferença é que essas importações estarão em um local (classe) que faz mais sentido (fábrica, construtor, etc.).
Ao permitir que as dependências sejam fornecidas por meio de um construtor ou método, você permite a flexibilidade de fornecer um objeto dependente diferente, mas ainda válido, para sua classe e aumenta a coesão dessa classe, removendo preocupações.
Existem vários princípios que são semelhantes e geralmente são usados juntos: Injeção de Dependência (DI), Inversão de Controle (IoC) e Princípio de Inversão de Dependência (DIP)
Deste artigo http://martinfowler.com/articles/dipInTheWild.html
fonte
A injeção de dependência não reduz a complexidade, mas aumenta a capacidade de manutenção através da separação de preocupações e redução do acoplamento.
Você deveria evitar aulas "enormes", ponto final. Então, digamos que você divida o controlador de exibição em classes menores e mais sustentáveis. Agora todos eles são responsáveis por se apossar de suas dependências. O DI ajuda a mover esse gerenciamento de dependências de todas essas classes para uma classe de fábrica / configuração que é responsável apenas pelo gerenciamento de dependências - consulte Princípio de responsabilidade única. E, embora certamente seja muito menos "hediondo" do que o controlador de exibição original, se ele for muito grande, você sempre terá a opção de dividi-lo em classes de gerenciamento de dependência menores, responsáveis por diferentes partes do aplicativo.
fonte
Nas palavras dos leigos:
A injeção de dependência move a complexidade para onde causa menos danos.
EDIT para @gnat: DI não está apenas movendo a complexidade para uma classe separada, está movendo-a para onde causa menos danos.
fonte