Pergunta de entrevista para Engenheiro de Software

O que é injeção de dependência e que problema ela realmente resolve?

O que o entrevistador está avaliando, como estruturar sua resposta e um exemplo falado que você pode adaptar.

Resposta rápida

Injeção de dependência significa que um componente recebe seus colaboradores de fora em vez de construí-los ele mesmo. O problema que resolve é acoplamento: se uma classe cria o próprio cliente de banco, você não consegue trocar, testar isolado nem controlar o tempo de vida dele. Passar as dependências pelo construtor as torna explícitas, faz a classe ser honesta sobre o que toca, e deixa você fornecer um fake nos testes ou uma implementação diferente por ambiente.

Por que os entrevistadores perguntam isso

Isso checa se você entende um princípio ou só usa uma anotação de framework. Os entrevistadores querem o argumento de acoplamento e testabilidade, a sacada de que parâmetros de construtor documentam as dependências reais de uma classe, e a maturidade de dizer que você não precisa de um container para fazer isso. Candidatos que não conseguem explicar o benefício sem citar um framework normalmente não sentiram a dor que aquilo conserta.

Como estruturar sua resposta

  • Defina como passar colaboradores em vez de construí-los.
  • Cite os dois benefícios: testabilidade e possibilidade de troca.
  • Aponte que não precisa de framework, só de parâmetros de construtor.
  • Dê um exemplo em que isso te economizou tempo de verdade.

Exemplo de resposta

Exemplo falado, em primeira pessoa

Significa só que a classe recebe o que precisa em vez de montar. Se o meu serviço de pedidos constrói o próprio cliente Postgres no construtor, ele está soldado ao Postgres e à connection string que estiver no ambiente, e todo teste dessa classe virou um teste de integração. Se ele recebe uma interface de repositório como parâmetro de construtor, eu passo a real em produção e uma em memória nos testes, e a classe não se importa. O benefício que eu passei a valorizar mais com o tempo é honestidade: a assinatura do construtor te diz exatamente o que essa coisa toca, então quando uma classe recebe sete dependências isso é um cheiro de design que você enxerga em vez de ter que ir procurar. Eu quero deixar claro que não acho que você precise de um container. Em serviços menores eu conecto tudo na mão num arquivo de composição, e esse arquivo vira o mapa do sistema. Frameworks ajudam quando a fiação fica tediosa, não antes.

Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.

Veja como funciona

Perguntas de acompanhamento que você pode esperar

  • Quando um container de DI adiciona mais complexidade do que remove?
  • Como você gerencia o tempo de vida de uma dependência injetada?
  • Como isso é diferente do padrão service locator?

Mais perguntas para Engenheiro de Software

Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.

Prever minhas perguntas

Ensaie as perguntas difíceis antes que elas apareçam

Pratique com um copiloto ao vivo e depois entre pronto. Um Session Pass de $29 te leva até o fim da entrevista, sem assinatura e sem amarras.

Instalar o GhostPilot