Skip to content
Latchkey

O Que é Dependency Injection? Fornecendo Colaboradores de Fora

Dependency injection (DI) fornece a um componente suas dependências de fora, em vez de fazer o componente criá-las por conta própria.

Quando uma classe constrói seus próprios colaboradores, um client de banco de dados, um serviço HTTP, ela fica soldada a essas escolhas concretas e difícil de testar. Dependency injection inverte isso: as dependências são passadas para dentro. O componente depende de uma interface, e o caller decide qual implementação fornecer. O maior benefício aparece em quão limpo você consegue testar o resultado.

Inversão de controle

Em vez de um componente sair para construir o que precisa, os objetos necessários são entregues a ele, via o construtor, um setter ou um framework. O componente declara do que depende; algo mais decide o que fornecer.

Por que ajuda

  • Testabilidade: injetar um fake ou mock no lugar da dependência real.
  • Flexibilidade: trocar implementações sem mudar o consumer.
  • Dependências claras: um componente declara o que precisa de antemão.
  • Acoplamento mais frouxo a classes concretas.

O benefício nos testes

DI é o que torna um componente unit-testável sem seus colaboradores reais. Você injeta um test double para o banco de dados ou serviço externo, então o teste roda rápido, deterministicamente e em isolamento, sem rede, sem banco de dados real, sem estado compartilhado.

CI mais rápido e confiável

Testes que injetam fakes para dependências lentas ou flaky rodam rápido e não quebram porque um serviço externo está fora do ar. Isso mantém a suíte de CI rápida e estável, reservando testes de integração mais lentos para o wiring real.

Onde traçar a linha

DI é uma ferramenta, não um objetivo. Sobre-injetar dependências triviais adiciona indireção que obscurece o código. Injete as coisas que você quer trocar ou fingir, network clients, serviços externos, e deixe a construção simples cuidar do resto.

Suítes de unit rápidas em runners quentes

Unit tests guiados por DI são rápidos justamente porque evitam dependências reais. Runners quentes (como o Latchkey) mantêm a suíte inteira rápida de ponta a ponta para que a velocidade que a DI te dá não seja perdida na inicialização do runner.

Principais conclusões

  • Dependency injection fornece a um componente suas dependências em vez de construí-las.
  • Ela torna componentes testáveis em isolamento, injetando fakes no lugar de colaboradores reais.
  • Injete o que você quer trocar ou fingir; não sobre-injete dependências triviais.

Guias relacionados