Referência/dependência circular, usar ou não usar?

2 respostas
M

Olá, estou usando referência circulares em um projeto meu e gostaria de saber a opinião de quem tem mais experiência nisso.
Pelo o que eu estou percebendo, referência circular só dá dor de cabeça e a única vantagem que eu estou tento é que eu posso acessar outro objeto sem precisar criar outra referência.

Para exemplificar:

public class WebSite{ /*outros atributos*/ private List<WebSiteBanner> banners; }public class WebSiteBanner{ /*outros atributos*/ private WebSite ownerWebSite; }O que aconselham? Usar ou não usar referência circular?
Estou pensando em tirar, pois todos os métodos que eu crio eu tenho que ter cuidado em não cair em loop infinito.

2 Respostas

Rodrigo_Sasaki
isso até que é comum, se for pensar em um relacionamento 1-N. Exemplo:
public class Funcionario{

    private List<Dependente> dependentes;

}

public class Dependente{

    private Funcionario funcionario;

}
Não é nada incomum de acontecer, agora não sei como você está fazendo pra cair em laços infinitos hehe
M
digaoneves:
isso até que é comum, se for pensar em um relacionamento 1-N. Exemplo:
public class Funcionario{

    private List<Dependente> dependentes;

}

public class Dependente{

    private Funcionario funcionario;

}
Não é nada incomum de acontecer, agora não sei como você está fazendo pra cair em laços infinitos hehe
Por exemplo: No meu método toString eu imprimo todos os atributos separador por virgulas.
public class Funcionario{
    private String nome;
    private List<Dependente> dependentes;
    
    public String toString(){
        return "(Nome: "+this.nome+", dependentes: "+this.dependentes+")";
    }
}

public class Dependente{
    private string nome;
    private Funcionario funcionario;

    public String toString(){
        return "(Nome: "+this.nome+", dependentes: "+this.funcionario+")";
    }

}
Aí para não cair em loop infinito no método toString em dependente, ao invés de eu imprimir o this.funcionario eu imprimo só o this.funcionario.getNome(), ou getId().
Criado 16 de junho de 2012
Ultima resposta 16 de jun. de 2012
Respostas 2
Participantes 2