Conceito de injeção de dependência

Oi gente, tudo bem
gostaria de poder entender um pouco mais sobre o conceito de injeção de dependencia, e em que caso que pode ser util?
Caso alguém tenha algum exemplo simples pra poder me ajudar a entender, ficaria muito grato.

1 curtida
1 curtida

Agradeço o exemplo, mas não teria algo mais simples…
Pois o texto é longo e complexo, parece estar explicando um padrão de projeto

Posso tentar esclarecê-lo, mas o meu esclarecimento vai em duas etapas. Evitarei o uso de termos com “o princípio hollywood”, que, provavelmente, você já deve ter ouvido falar. Vamos lá:

1 - se você quer injeção de dependência, é porque você quer construir algum objeto que depende de outros;
2 - existem várias formas manuais (“by hand”) de se passar a dependência para um objeto, a que eu prefiro é via construtor (quando disponível);
3 - imagine que o objeto que você quer construir recebe 15 dependências via construtor. Não é trabalhoso passar essas dependências manualmente? Pior, imagine que uma das dependências, para ser construída, também necessite que suas dependências sejam resolvidas?

Conclusão 1: a injeção de dependências permite que o contêiner se encarregue de construir seus objetos com toda a complexidade descrita acima.

Continuando…

1 - se você passou suas dependências, no lugar de deixá-las “hardcoded”, ou seja, se você evitou usar o operador new dentro do seu objeto dependente, você terá de bônus a capacidade de passar dependências fictícias caso queira testar seu objeto;
2 - agora, repare que a injeção de dependência permite que você teste suas classes mais facilmente, basta sinalizar para o contêiner que, no lugar de passar dependências reais, que seja passado dependências fictícias (mock).

Mesmo que você não tivesse injeção de dependência, o design no qual as dependências são passadas via construtor ou via setter na mão, já ajuda na parte de testes.

Resumo da opera: injeção de dependência ajuda a lidar com a complexidade de criar objetos com muitas dependências, além disso, um design no qual as dependências são injetadas ou passadas como parâmetro (seja construtor ou via setter) permite que o objeto dependente seja testado, passando objetos fictícios, quando necessário.

Abraço

3 curtidas

[quote=fabiobh]Agradeço o exemplo, mas não teria algo mais simples…
Pois o texto é longo e complexo, parece estar explicando um padrão de projeto[/quote]
Oi, fabiobh
Te aconselho esse site: http://www.neoframework.org/dist/documentacao/cap_injecao.html. É bem simples e claro.

1 curtida

Injeção de dependencia é quando você quer que o objeto X seja fornecido para vc. E vc não tenha que se preocupar.

Vamos supor que vc tenha uma classe asim:

@Stateless public class UserFacade{ public void salvar(User user){...} public void editar(User user){...} // E assim vai }

Aí no seu projeto web voce para poder acessar a classe Facade com tudo configurador bonitin (conexão aberta, contexto e tals)
bastaria fazer assim (supondo que vc utilizaria JSF)

public class UserManagedBean{ @EJB UserFacade userFacade; }

Repare que vc não irá precisará buscar o UserFacade via RMI ou Lookup ou fazer um new UserFacade(). O container (JBoss, tomcat, etc) irá fazer isso para vc.

3 curtidas