Diferença entre "Injeção de dependência" e "Inversão de controle"

15 respostas
N

Bom dia,
Alguém poderia dizer qual a diferenca entre “Injeção de dependência” e “Inversão de controle”.
Olhando o conceito de ambos… parecem q sao sinonimos… mas acredito q nao sao…

Obrigado

15 Respostas

M

A bastante tempo atrás já foi discutido isso aqui no guj.

Na prática não tem diferença nenhuma, mas me lembro que teoricamente algumas pessoas apontaram diferenças.

A

Realmente, cada um tem sua opinião sobre o assunto. Isso envolve três conceitos: inversão de dependência, inversão de controle e injeção de dependência. Na minha opinião é o seguinte:

Inversão de dependência e inversão de controle são princípios de projeto de software orientado a objetos e injeção de dependência é uma técnica para especificar classes concretas de maneira flexível.

Inversão de Dependência: é um termo geral para designar que tanto componentes de alto nível quanto componentes de baixo nível dependem de abstrações. Esse princípio estimula o uso de abstrações em vez de classes concretas. Exemplos de padrões que possibilitam isso: factories.

Inversão de Controle: também chamado de princípio de hollywood, ou seja, “não nos chame, nós chamamos vc”. Exemplo de padrão: template method

Injeção de dependência: é uma técnica utilizada para instanciar classes concretas, sem se manter acoplado a elas. Projetos que usam inversão de dependência e inversão de controle são fáceis de se beneficiar de containeres de injeção de dependência.

Bem, acho q é isso. Se eu estiver errado, por favor me corrijam.

P

Versão resumida do post anterior:

Inversão de controle é estratégia, injeção de dependência é tática.

P

Injeção de Dependências é uma formad e Inversão de Controle.

C

E quais são outras formas de inversão de controle?

D

carneiro:
E quais são outras formas de inversão de controle?
Dependency lookup. Exemplo: Registry (JNDI), Factory…

C

De onde saiu que lookup eh inversao de controle? Se A precisa de B e A vai buscar B, nao eh exatamente invertido :stuck_out_tongue:

Z

Foi o que eu pensei (mas fiquei quieto… vai que sou eu que estou meio por fora do assunto!).

Aliás, todo o auê em cima de IoC e DI surgiu por que ninguem aguentava mais fazer lookups, principalmente quando se trabalhava com as versão antigas de EJB. (< 3.0).

A

D

cv:
De onde saiu que lookup eh inversao de controle? Se A precisa de B e A vai buscar B, nao eh exatamente invertido :P
Imaginei isso porque A não instancia B, C instancia B para A. Já que eu estava errado, quais seriam as outras formas de inversão de controle?

M

De onde saiu que lookup eh inversao de controle? Se A precisa de B e A vai buscar B, nao eh exatamente invertido :P

Ora, a injeção de dependências é simplesmente uma automatização da ida ao registro pra pegar o objeto. A inversão de controle não interessa como eu peguei, o importante é eu não criar o objeto diretamente.

G

Inversao de controle = principio de Hollywood = “don’t call us, we’ll call you”. :slight_smile:

Trata-se de uma caracteristica comum a diversos frameworks, vc coloca o componente la e o framework se encarrega de chama-lo (o principio eh compativel com a ideia de reuso de interacoes presentes nos frameworks - alias, eh peca necessaria).

Conforme disse o Philip, injecao de Dependencias usa Inversao de Controle. Concordo que eh confuso, especialmente porque um batalhao de gente usa o termo “inversao de controle” como referencia a “injecao de dependencias”.

T

Mais aqui e aqui. Atenção para o quote do Ralph GoF Johnson e do Brian Foote.

T

Interessa sim. Interessa saber que você não tem uma referência para o Locator. Se tiver, não é DI.

/* Não é DI. Não  para saber se o getCleverObject criou neste momento
um CleverObject ou reusou um  pronto. E acho que nem é importante.
O problema ali foi a referência ao Service.*/
myObj  = Service.getCleverObject();
myObject.runForest();
W

Galera, para quem tem dúvidas sobre este assunto, aí vai uma dica muito legal para estudos.

O kara que escreveu isso é simplesmente o papa em desenvolvimento de software e este artigo apresenta uma abordagem mais do que interessante a respeito de IoC ou Injençao de Independência.

Boa leitura!!!

Segue o link para o artigo em português: http://www.javafree.org/content/view.jf?idContent=1

Criado 5 de abril de 2007
Ultima resposta 23 de jun. de 2007
Respostas 15
Participantes 14