Porque usar IOC ? qual o motivo de não ficar dando new ou criar factory para um projeto ? Que vantagens você tem quando usa o IOC ???
Obrigado,
[]'s
Alberto
Porque usar IOC ? qual o motivo de não ficar dando new ou criar factory para um projeto ? Que vantagens você tem quando usa o IOC ???
Obrigado,
[]'s
Alberto
Artigos antigos, mas válidos:
Tutorial no guj sobre IOC
http://www.guj.com.br/java.tutorial.artigo.155.1.guj
ASOBrasil
Alberto,
A idéia é conseguir o desacoplamento entre cliente e produto que a factory te dá, mas sem ter que inventar milhares de fábricas ou uma fábrica enorme com uma interface toda inchada.
Bem, na verdade a injeção de dependências vai um pouco mais longe - você não fica nem sequer acoplado à interface da fábrica. Isso é particularmente relevante em sistemas flexíveis, onde normalmente você quer limitar o acoplamento o máximo possível.
Além disso, é compatível com a idéia de que a implementação concreta deve ser mais um dado de configuração do que qualquer outra coisa.
[quote=Giuliano Mega]Alberto,
A idéia é conseguir o desacoplamento entre cliente e produto que a factory te dá, mas sem ter que inventar milhares de fábricas ou uma fábrica enorme com uma interface toda inchada.
Bem, na verdade a injeção de dependências vai um pouco mais longe - você não fica nem sequer acoplado à interface da fábrica. Isso é particularmente relevante em sistemas flexíveis, onde normalmente você quer limitar o acoplamento o máximo possível.
Além disso, é compatível com a idéia de que a implementação concreta deve ser mais um dado de configuração do que qualquer outra coisa.[/quote]
Bom dia Giuliano Mega, aproveitando a discussão fiz um teste e queria saber se está correto dizer que estou invertendo o controle neste exemplo:
// Classe a ser usada
public class B {
public void imprime() {
System.out.println("Estou na classe B !!!");
}
}
//Classe que usa a classe B
public class A {
private B b;
public B getB() {
return b;
}
public void setB(B b) {
this.b = b;
}
public void usaB() {
// chama o método imprime da classe b
b.imprime();
}
}
// Classe de teste
public class TesteAUsandoB {
public static void main(String[] args) {
A a = new A();
B b = new B();
a.setB(b);
a.usaB();
}
}
Pensei tb em outro jeito será que é mais certo ?
// Classe a ser usada
public class B {
public void imprime() {
System.out.println("Estou na classe B !!!");
}
}
//Classe que usa a classe B
public class A {
private B b;
public A(){
b = new B();
}
public void usaB() {
// chama o método imprime da classe b
b.imprime();
}
}
// Classe de teste
public class TesteAUsandoB {
public static void main(String[] args) {
A a = new A();
a.usaB();
}
}
desde já agradeço.
Primeiro, suponho que você esteja se referindo a uma forma específica de IoC chamada de Injeção de Dependência.
Exatamente! Porém, o trabalho de
e
será feito pelo teu Vanilla DI Container.
[quote=alberto_ribeiro]
Pensei tb em outro jeito será que é mais certo ?
...
//Classe que usa a classe B
public class A {
private B b;
public A(){
b = new B();
}
public void usaB() {
// chama o método imprime da classe b
b.imprime();
}
}
...
desde já agradeço.[/quote]
Hey, onde está a DI neste caso?
no post abaixo…
[quote=TheMask]Primeiro, suponho que você esteja se referindo a uma forma específica de IoC chamada de Injeção de Dependência.
Exatamente! Porém, o trabalho de
e
será feito pelo teu Vanilla DI Container.
[quote=alberto_ribeiro]
Pensei tb em outro jeito será que é mais certo ?
...
//Classe que usa a classe B
public class A {
private B b;
public A(){
b = new B();
}
public void usaB() {
// chama o método imprime da classe b
b.imprime();
}
}
...
desde já agradeço.[/quote]
Hey, onde está a DI neste caso?[/quote]
Bom DIA TheMask, cara muito obrigado, vou dar uma lida no Vanilla, obrigado por analisar meu código…
e quanto ao segundo exemplo eu coloquei o new B() no construtor de A, não sabia se estava certo, neste segundo caso acho eu que fica fortemente acoplada, se eu mudar o jeito de instanciar o B vou ter que alterar minha classe A certo ???
[]'s e muito Obrigado mesmo…
Boa páscoa Alberto,
o vanilla foi apenas eu tentando brincar com o meu péssimo inglês. Ok, eu sei que o cv vai me zoar.
Nos links daquelas palavras, aparecem 4 frameworks de DI. Veja-os.
[quote=“alberto_ribeiro”]
…
e quanto ao segundo exemplo eu coloquei o new B() no construtor de A, não sabia se estava certo, neste segundo caso acho eu que fica fortemente acoplada, se eu mudar o jeito de instanciar o B vou ter que alterar minha classe A certo ???
[]'s e muito Obrigado mesmo…[/quote]
Não é uma questão de certo/errado. Você apenas não usou injeção de dependências ali.
E não é bem o jeito de instanciar B, mas principalmente se você precisar trocar B por C que extende B. Ou melhor, por C que implementa D assim como B também o faz. (Re)leia o primeiro artigo recomendado pelo ASOBrasil para uma explicação melhor.
Abs.
Er… “vanilla” nao eh um framework especifico. Eh qualquer framework de DI (picocontainer, spring, guice, hivemind, etc). Repare nos links no post do TheMask.
Pense que vc quer instanciar A passando outra implementacao de B pra ele. Sim, vc vai ter que alterar A pra permitir isso.
Opa obrigado CV, eu coloquei como se fosse um framework porque não tinha lido até o momento que respondi ao theMask…
E boa Páscoa para theMask e Cv…
obrigado pela resposta…