A resposta mais votada atualmente a uma pergunta muito recente afirma que
Os contêineres DI são um padrão de "software corporativo", usado quando o gráfico de objetos é muito grande e complexo. Suspeito que 95% dos aplicativos não exijam isso.
o que é algo que discordo totalmente. Talvez eu tenha entendido errado a terminologia, mas para mim o framework DI significa apenas "algo conectando meus objetos". Estou esquecendo de algo?
Estou usando o Guice mesmo para projetos muito pequenos (como 10 classes) para simplificá- los. Claro, é um arquivo JAR de 400 kB, mas não é com isso que eu me importo. Para um projeto pequeno, quase nunca preciso de nenhuma configuração e a única "sobrecarga" é adicionar a @Inject
anotação.
Então, eu realmente me pergunto, que complexidade adicional as estruturas de DI causam?
Atualização abordando as respostas
Em um projeto de 82 classes, eu tenho
- 32
@Inject
anotações - 15
@Singleton
e 1@ProvidedBy
anotações - 4 fornecedores (todos os quais eu precisaria também sem DI, pois são minhas fábricas)
- 1 Módulo contendo uma única linha
- 0 linhas XML !!!
Isso é tudo. Claro, é um projeto pequeno, mas exatamente esse foi o meu ponto. O trabalho adicional foi mais algumas palavras do que linhas .
Estou usando apenas injeção de construtor para obter objetos imutáveis "descontraídos". Sempre que uma nova dependência aparece, adiciono um campo final, deixo que o RequiredArgsConstructor da Lombok cuide da declaração e Guice cuide de chamá-la corretamente.