A injeção de dependência (DI) é um padrão bem conhecido e moderno. A maioria dos engenheiros conhece suas vantagens, como:
- Tornando possível / fácil o isolamento em testes de unidade
- Definindo explicitamente dependências de uma classe
- Facilitar o bom design ( princípio de responsabilidade única (SRP), por exemplo)
- Habilitando a implementação de alternância rapidamente (em
DbLoggervez deConsoleLoggerpor exemplo)
Eu acho que existe um consenso em todo o setor de que o DI é um padrão bom e útil. Não há muitas críticas no momento. As desvantagens mencionadas na comunidade são geralmente menores. Alguns deles:
- Maior número de classes
- Criação de interfaces desnecessárias
Atualmente, discutimos o projeto de arquitetura com meu colega. Ele é bastante conservador, mas de mente aberta. Ele gosta de questionar coisas que considero boas, porque muitas pessoas em TI apenas copiam a tendência mais recente, repetem as vantagens e, em geral, não pensam muito - não analisam muito profundamente.
As coisas que eu gostaria de perguntar são:
- Devemos usar injeção de dependência quando temos apenas uma implementação?
- Deveríamos proibir a criação de novos objetos, exceto os de linguagem / estrutura?
- Injetar uma única implementação é uma péssima idéia (digamos que temos apenas uma implementação para não querermos criar uma interface "vazia") se não planejamos testar uma unidade em particular em uma classe específica?
UserServiceclasse que é apenas um detentor de lógica. Ele recebe uma conexão com o banco de dados e os testes são executados dentro de uma transação que é revertida. Muitos chamariam isso de má prática, mas descobri que isso funciona muito bem. Não é necessário contorcer seu código apenas para teste e você obtém o erro ao encontrar o poder dos testes de integração.