Usando DAO (gostaria de sugestões)

4 respostas
R

Bom, vou tentar explicar direito qual o problema.

Estou com problema nos relacionamentos! Quando eu tenho uma entidade que se relaciona com outra (uma relação simples, ex: o funcionário tem um cargo apenas), na implementação do meu DAO, não sei se trago para a memória só o Objeto Funcionario sem o cargo, ou se crio um objeto Cargo também! Pois posso ter excesso de cópias na memória! Cada vez que alguem trouxer um tecnico de hardware, por exemplo, vou buscar no banco de dados e criar um novo.

O maior problema é para relacionamentos de um para vários, seria pior ainda, trazer uma lista imensa para a memória (se isso for problema)

Bom, mas outro problema sério mesmo, é que no meu sistema existem relacionamentos complexos, então, se eu trouxer uma instancia de uma Classe, ela vai trazer outras duas entidades, e essas duas vão trazer outras, e posso chegar num loop infinito, não sei se deu pra entender.
O que eu queria saber, é como fazer uma abordagem prática desses relacionamentos?

Pensei em guardar os códigos (de cargo por exemplo) nas classes, mas isso ficaria totalmente fora da orientação a objetos!

O lance é que não posso fazer algo muito complexo, pois estou no meio da implementação, esse é meu Trabalho de Graduação, e o prazo é para outubro!

A propósito, estou criando os DAOs usando PreparedStatement e carregando as queries em arquivos de properties!

Qualquer ajuda é bem vinda.

4 Respostas

TedLoprao

De uma estudada em proxies e Lazy Loading… O q acontece é q, por exemplo, supomos que seu Pessoa possua um atributo Cidade, ao carregar Pessoa, vc coloca um Proxy no lugar de Cidade e no momento que vc realmente necessitar da Cidade o seu Proxy busca o mesmo, seja de sua camada de persistência ou sei lá de onde!!

Mais ou menos por aí, :wink:

Fallow

R

Blz, valeu, vou dar uma pesquisada!

C

Gostaria de saber que tipo de métodos podem ser colocados nesta classe proxy. Seria +/- isto??? Apenas métodos para recuperar cidades ??

class ProxyCidade
{

       private Cidade getCidade(int nCodCidade)
      {
            return (Cidade)cidadeDao.findByCodigo(nCodCidade) 
      }
      ....
}
TedLoprao

Acho q isso vai depender da sua aplicação, um exemplo, seria vc ter uma interface Cidade, uma classe que implementasse cidade e fosse a própria e outra que fosse o proxy que tbm implementa Cidade. Por exemplo:

public interface Cidade {
    String getNome();
}
public class CidadeImpl implements Cidade {
   private String nome;
   public  String getNome() { return nome;  }
}
public class CidadeProxy implements Cidade {
   private Cidade instance;
   public  String getNome() { 
      loadCidade();
      return instance.getNome();  
   }

   private void loadCidade() {
      if (instance == null) {
         instance = buscaCidade(); // Vai buscar a cidade de alguma maneira
      }
   }
}

Veja q esse é um exemplo simples usando apenas a estrutura OO. O seu Pessoa possuirá um field do tipo Cidade, não importando se o mesmo é um proxy ou o cidade real, no momento que vc realmente necessitar dos dados da classe o proxy a carregará!

Existem outras maneiras de fazer proxies, como utilizar algumas APIs como CGLIB para gerar Proxies para vc!

Fallow

Criado 10 de agosto de 2004
Ultima resposta 10 de ago. de 2004
Respostas 4
Participantes 3