Relacionamento entre objetos

3 respostas
R

Considere que eu tenha um obejto A que tenha como propriedade um objeto B que tenha como propriedade um objeto C e que esse tenhas como propriedades os objetos D e E. No momento em que eu preencha os valores do objeto A e esses valores vem do banco de dados, eu tenho que carregar também os valores dos outros objetos (B, C, D e E)?

3 Respostas

A

Ajudaria saber se você está usando (ou considerando) alguma ferramenta de mapeamento objeto-relacional como o Hibernate ou o Toplink.

Existem basicamente duas abordagens para este tipo de problema: carregar todo o grafo de objetos (ou seja, trazer a o objeto raiz e todas as referências que ele tem, recursivamente) ou fazer lazy loading. Com lazy loading, você traz o objeto do banco sem preencher as referências, mas quando alguém tenta usar uma delas (A.getB() por exemplo) o seu objeto carrega os dados do banco. É claro que se pode fazer diversas combinações dessas estratégias; uma comum é trazer do banco as referências diretas e fazer lazy loading das coleções.

Se você estiver usando JDBC diretamente, precisará codificar estes acessos todos, tipo:

public class A {
  private B b;

  public B getB() {
    if (null == b) 
      b = getDao().getBforA(this);
    return b;
  }
}

Se estiver usando um framework de persistência, basta configurar os mapeamentos da maneira desejada.

R

AllMighty, obrigado pela participação.

Bom, na verdade não estou usando nenhuma ferramenta para persistência. A principio também não será utilizado.

Sei que esse é um forum de Java, mas isso será aplicado em C#. E que tenho feito algumas pesquisaas e esse forum é muito bom. Tentar conversar sobre OO em forum de Delphi ou C# é um tormento.

Você poderia me indicar onde posso pesquisar sobre lazy loading?

A

http://www.amazon.com/Patterns-Enterprise-Application-Architecture-Fowler/dp/[telefone removido]

Recomendo muito este livro (não preciso dizer que os padrões são language agnostic).
Agora não me recordo de nenhum material específico na web.

Criado 26 de outubro de 2006
Ultima resposta 27 de out. de 2006
Respostas 3
Participantes 2