Diferença entre "Injeção de dependência" e "Inversão de controle"  XML
Índice dos Fóruns » Arquitetura de Sistemas
Autor Mensagem
nadilsons
JavaTeenager
[Avatar]

Membro desde: 25/09/2006 23:10:20
Mensagens: 179
Offline

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

Jesus é o caminho, a verdade e a vida!
marcelomartins
Moderador
[Avatar]

Membro desde: 07/01/2004 10:53:19
Mensagens: 1272
Localização: Porto Alegre - RS
Offline

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.

Marcelo Martins
--
Tudo que hoje eu realmente preciso saber, aprendi no jardim da infancia.

[Email]
Alexandre Gazola
JavaChild

Membro desde: 23/07/2004 14:48:23
Mensagens: 100
Offline

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.

Alexandre Gazola
SCJP, SCWCD

"Que proveito tem o homem ganhar o mundo inteiro e perder a sua alma?" (Mc. 8:36)

"Buscai, em primeiro lugar, o Reino de Deus e a sua justiça, e todas essas coisas vos serão dadas por acréscimo" (Mt. 6:33)
psevestre
JavaEvangelist

Membro desde: 13/05/2005 12:53:19
Mensagens: 333
Localização: São Paulo
Offline

Versão resumida do post anterior:

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



[MSN]
pcalcado
Moderador
[Avatar]

Membro desde: 08/03/2004 17:19:35
Mensagens: 5053
Localização: Melbourne - Australia
Offline

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

Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay
[Email] [WWW] [Yahoo!] [MSN]
carneiro
JavaEvangelist
[Avatar]

Membro desde: 07/04/2005 11:37:42
Mensagens: 310
Offline

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

Davi Luan Carneiro
Desenvolvedor JEE
[Email] [MSN]
David
JavaEvangelist
[Avatar]

Membro desde: 18/03/2005 13:10:33
Mensagens: 432
Localização: Natal/RN
Offline

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

David Pereira
Engenheiro de Computação - UFRN
Mestre em Engenharia Elétrica
Doutorando em Engenharia Elétrica
[WWW]
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7757
Localização: London, UK
Offline

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


De onde saiu que lookup eh inversao de controle? Se A precisa de B e A vai buscar B, nao eh exatamente invertido
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
ZehOliveira
Virtual Machine Man
[Avatar]

Membro desde: 12/12/2003 22:13:49
Mensagens: 963
Localização: Maceio-AL
Offline

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

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).

joseoliveira.com
alberto_ribeiro
JavaGuru
[Avatar]

Membro desde: 01/07/2005 11:15:19
Mensagens: 256
Localização: Embu Guaçu
Offline

...

Sun Certified Programmer for Java 1.5
[Email] [MSN]
David
JavaEvangelist
[Avatar]

Membro desde: 18/03/2005 13:10:33
Mensagens: 432
Localização: Natal/RN
Offline

cv wrote:De onde saiu que lookup eh inversao de controle? Se A precisa de B e A vai buscar B, nao eh exatamente invertido
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?

David Pereira
Engenheiro de Computação - UFRN
Mestre em Engenharia Elétrica
Doutorando em Engenharia Elétrica
[WWW]
Mauricio Linhares
Moderador
[Avatar]

Membro desde: 09/01/2005 23:28:22
Mensagens: 3384
Localização: João Pessoa, Paraíba - Brasil
Offline

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


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


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.

Blog pt-br | Blog en | My Last.fm | Blog de RPG
----------------------------------------
PBJUG - Grupo de Usuários Java da Paraíba | Paraíba.rb - Paraíba Ruby Brigade
How do we tell truths that might hurt?
[WWW] [MSN]
Giuliano Mega
JavaBaby

Membro desde: 22/08/2005 19:01:35
Mensagens: 94
Offline

Inversao de controle = principio de Hollywood = "don't call us, we'll call you".

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".
TheMask
JavaBaby
[Avatar]

Membro desde: 14/04/2006 19:28:16
Mensagens: 76
Offline

Martin Fowler wrote:When I first ran into inversion of control, it was in the main control of a user interface. Early user interfaces were controlled by the application program. You would have a sequence of commands like "Enter name", "enter address"; your program would drive the prompts and pick up a response to each one. With graphical (or even screen based) UIs the UI framework would contain this main loop and your program instead provided event handlers for the various fields on the screen. The main control of the program was inverted, moved away from you to the framework.


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

**** Demaaaaaaais ****
TheMask
JavaBaby
[Avatar]

Membro desde: 14/04/2006 19:28:16
Mensagens: 76
Offline

Maurício Linhares wrote:A inversão de controle não interessa como eu peguei, o importante é eu não criar o objeto diretamente.


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


**** Demaaaaaaais ****
 
Índice dos Fóruns » Arquitetura de Sistemas
Ir para:   
Powered by JForum 2.1.8 © JForum Team