Será q alguém me ajuda nessa?
Me avise caso a explicação não esteja clara para eu melhorar.
Vamos lá, minha aplicação contém as seguintes classes, entre
outras:
Projeto //JFrame
Enderecos //JTable
SubProjeto //existem vários SubProjeto em um Projeto
TabelaDeComponentes //JTable
Celula //existem várias Celula em uma TabelaDeComponentes
ComponenteDeCelula
Um Projeto contém uma JTable Enderecos.
Um Projeto também contém vários objetos SubProjeto.
Um SubProjeto contem varias JTable TabelaDeComponentes.
Uma TabelaDeComponentes contém vários objetos Celula.
Uma Celula pode conter um ComponenteDeCelula, que será pintado na posição da célula na TabelaDeComponentes a qual a célula pertence.
O ComponenteDeCelula contém um endereço (podem haver 2 ou mais ComponeteDeCelula com o mesmo endereço), e seus métodos utilizam esse endereço para fazer consultas na tabela Endereços e obter outros dados.
Daí a pergunta, já que a tabela Enderecos pertence ao objeto Projeto, para o ComponenteDeCelula ter acesso a classe Enderecos qual seria o melhor caminho?
Pensei em alguns, mas parecem más opções devido ao acoplamento…
Um exemplo seria passar o “parent” ou o “handle”(manipulador) para cada classe, os construtores ficariam:
public SubProjeto(Projeto handle) {}; //recebe o Projeto que o manipula
public TabelaDeComponentenes(SubProjeto handle) {}; //recebe o SubProjeto que o manipula
public Celula(TabelaDeComponentenes handle) {}; //recebe a TabelaDeComponentes que o manipula
public ComponenteDeCelula(Celula handle) {}; //recebe a Celula que o manipula
O método getEndereco ficaria:
ComponenteDeCelula->getEndereco() {
Celula cel = handle;
TabelaDeComponentes tab = cel.getHandle();
SubProjeto sub = tab.getHandle();
Projeto p = sub.getHandle();
Enderecos e = p.getEnderecos();
return e;
}
Ou ainda, um outro modo, seria passar a instância de Enderecos para cada construtor…
Projeto->new SubProjeto(enderecos)
SubProjeto->new TabelaDeComponentes(enderecos)
TabelaDeComponentes->new Celula(enderecos)
Celula->new ComponenteDeCelula(enderecos)
Neste caso todas as classes receberam o objeto de Enderecos apenas para passar adiante… olhando me pareceu que pode melhorar bastante… não há necessidade de todos conhecerem Endereco, apenas o CompontenteDeCelula.
Alguém tem alguma idéia, ou sabe algum padrão de projeto que se aplique aqui? Estou estudando o caso, qualquer coisa eu posto aqui…