Quando se fala em Injeção de Dependência, muita gente pensa logo em classes, interfaces e até em frameworks. Mas a verdade é bem mais simples do que isso. E aqui no The{Code}Naked, a gente gosta de lembrar que muitas vezes você já está usando um conceito — só não percebeu ainda.
Vamos tirar a roupa do conceito: parâmetros são, por natureza, uma forma de Injeção de Dependência.
O que é uma dependência?
É qualquer coisa que um código precisa para funcionar:
- Um objeto (logger, repositório, configuração)
- Um método (função ou procedimento)
- Um valor
- Um comportamento
Se você passa isso como argumento para uma função ou método, você está injetando a dependência. Simples assim.
Exemplo simples: uma função que recebe outra função
procedure ValidarEntrada(const AValor: string; AValidador: TFunc<string, Boolean>);
begin
if AValidador(AValor) then
ShowMessage('Valor válido')
else
ShowMessage('Valor inválido');
end;A função ValidarEntrada não sabe como validar. Ela depende de um validador. Mas ela recebe esse comportamento de fora. Isso é Injeção de Dependência. Não tem container, não tem classe. Tem clareza.
Por que isso é importante?
Porque quando você entende o conceito no nível mais simples, você começa a escrever código mais limpo, mais testável e menos acoplado, mesmo sem usar nenhum padrão sofisticado.
- Quer testar? É só passar uma função falsa.
- Quer trocar o comportamento? Mude o parâmetro.
- Quer isolar efeitos colaterais? Injete dependências puras.
Esse é o poder da simplicidade.
Injeção de Dependência é um princípio, não uma tecnologia
O problema é que muitos desenvolvedores são apresentados à DI através de frameworks pesados, containers complexos e termos rebuscados. Aí acreditam que só estão usando Injeção de Dependência se houver um grafo de objetos e uma classe mágica ligando tudo.
Mas se você escreve uma função que depende de outra função passada como parâmetro, você está aplicando DI no seu estado mais puro.
Conclusão nua e crua
A verdade é que você não precisa de um framework para aplicar boas práticas. Nem de uma buzzword pra justificar um código simples e claro.
Parâmetros são o primeiro degrau da injeção de dependência. Eles tornam seu código flexível, testável e legível. Não subestime o poder da simplicidade.
Aqui no The{Code}Naked, a gente acredita que entender os princípios é mais importante do que decorar padrões.
Injetar é entregar o poder de escolha ao código chamador. E isso é maturidade.
No próximo artigo: "Dependências explícitas são um ato de coragem".