TheCodeNaked

Injeção de Dependência - Parte 1 (Copy)

Injeção de Dependência não é sobre containers

Quando você ouve falar em Injeção de Dependência (DI), é bem provável que pense logo em um framework ou em um container de injeção cheio de configurações mágicas. Mas aqui é o TheCodeNaked, e a gente vai direto ao ponto: injeção de dependência é um conceito, não um framework.


O que é injetar uma dependência, de verdade?

É simples: é fornecer explicitamente, de fora pra dentro, os objetos de que uma classe precisa para funcionar.

  • Se uma classe precisa de um Logger, você passa um Logger para ela.
  • Se precisa de um repositório, você passa o repositório.

Isso é injetar. Pode ser via construtor, via propriedade, ou mesmo via método. É só isso.


Mas... e os containers?

Containers são úteis, mas não são obrigatórios. Na verdade, são uma camada a mais que resolve problemas de escalaciclo de vida e configuração dinâmica.

O problema é quando você aprende o container antes de entender o conceito. Aí tudo vira mágica, e você não entende por que o código funciona (ou para de funcionar).


Injetar é sobre clareza, não sobre facilidade

Muita gente confunde DI com "facilidade de acesso". Mas injetar dependências é, antes de tudo, sobre clareza e controle:

  • Clareza sobre o que uma classe realmente depende.
  • Controle sobre o ciclo de vida dos objetos.
  • Facilidade de testar e substituir dependências.

Se você esconde isso num container mal compreendido, perde exatamente o que devia ganhar.


Exemplo simples, sem container

// Delphi
constructor TMeuServico.Create(ALogger: ILog);
begin
  FLogger := ALogger;
end;
// TypeScript
class MeuServico {
  constructor(private logger: Logger) {}
}

Nenhum framework. Nenhuma mágica. Apenas injeção.


Quando usar containers?

  • Quando você tem muitos objetos com dependências encadeadas.
  • Quando precisa trocar implementações dinamicamente.
  • Quando quer gerenciar ciclos de vida complexos (escopos, singletons, etc).

Se você entende o que está fazendo, containers ajudam. Mas se você está usando só porque viu num tutorial, talvez esteja criando um monstro.


Conclusão nua e crua

Injeção de dependência é um conceito simples, poderoso, e absolutamente essencial para códigos flexíveis. Mas ele não tem nada a ver, necessariamente, com containers ou frameworks.

Aqui no TheCodeNaked, a gente prefere deixar as coisas nuas:

Se você não consegue explicar o que o container está fazendo por você, talvez você não devesse usá-lo ainda.

Comece simples. Injete com consciência. Depois, se for o caso, traga um container pra te ajudar.


No próximo artigo: "Dependências explícitas são um ato de coragem".

Sobre o autor

TheCodeNaked

No TheCodeNaked, programar é consequência, não ponto de partida. Antes do código, vem a dúvida, a análise, o contexto. Não seguimos fórmulas — questionamos. Criar software é pensar com clareza. O resto é só digitação.

TheCodeNaked

Criar com clareza. Codificar com intenção.

TheCodeNaked

Ótimo! Você se inscreveu com sucesso.

Bem-vindo de volta! Você acessou com sucesso.

Você se inscreveu com sucesso o TheCodeNaked.

Sucesso! Verifique seu e-mail para acessar com o link mágico.

As suas informações de faturamento foram atualizadas.

Seu pagamento não foi atualizado