Modelagem

Olá pessoal,

Estou modelando um sistema aqui mas cheguei numa parte q naum consigo pensar em nenhuma solução plausível.
Eu tenho o seguinte cenário:

Relacional:

|Cliente| -1-----|Conta_Fundo|-----1-|Fundo|-1------|Movimento|
|-1--------------------------------------------------------------------*|

Ou seja, o meu cliente possui uma lista de fundos onde ele investe, e cada fundo possui N movimentos para cada cliente.

Meu objetivo era chegar em algo do tipo:

Cliente.Fundos(0).getMovimentos()
E receber como retorno todos os movimentos daquele cliente naquele fundo.

Mas realmente naum estou conseguindo. Por isso acredito q seja algum erro de conceito meu.

Acho que não entendi muito bem a dúvida, mas lá vai:

Então kara, sua modelagem está perfeita, agora na codificação você poderia criar uma classe Cliente que teria uma coleção de Fundo e a classe Fundo por sua vez teria uma Coleção de Movimento.

Que teria como resultado algo parecido com isso:

classe Cliente

public class Cliente { private Collection<Fundo> fundos; //set e get para o atributo acima }

classe Fundo

public class Fundo { private Collection<Movimento> movimentos; //set e get para o atributo acima }

classe Fundo

public class Movimento { //atributos }

método qualquer, acessando os movimentos de um Cliente:

public void logDosMovimentosDoPrimeiroFundo(Cliente cliente) { Collection<Movimento> movimentos = cliente.getFundos(0); for (Movimento movimento : movimentos) { System.out.println(movimento); } }

É essa a dúvida?

Falows

amigo,

Não sei se estou certo mas, movimento deve estar relacionado com conta não? (aí depende do seu problema real)

E ciclos só são bem vindos quando realmente são necessários, e neste caso não parece ser.

Opa, e ae blz!

Entaum, a estrutura q eu quero montar eh essa q vc mando ai msm!

Mas o meu problema eh tipo assim, o meu objeto Movimento tem q ter duas visualizações diferentes.

A primeira seria tipo assim

Fundo fundo = new Fundo(10);
Collection<Movimentos> movimentos =  fundo.getMovimentos();  //Retorna todos os movimento daquele fundo

E a segunda:

Cliente cliente = new Cliente(1);
Collection<Movimentos> movimentos = cliente.fundo(0).getMovimentos() //Retorna todos os movimentos daquele fundo e daquele cliente

Ai oq eu naum to conseguindo pensar é como fazer o segundo caso.

Eu naum estou conseguindo visualizar um jeito de fazer o getMovimentos identificar que aquele fundo a quem ele pertence esta dentro de um cliente x.

Mas pra que você quer saber de qual Cliente o Fundo é?

Mas bem, primeiro:

Pra você conseguir pegar o fundo fazendo desse jeito “(0)”, você vai ter que fazer algo como:

Desse jeito você pega o primeiro item da sua collection.

Agora, pra você manter a referência do Cliente no Fundo, é só colocar um atributo no Fundo do tipo Cliente.

public class Fundo { private Collection<Movimento> movimentos; private Cliente cliente; //set e get para o atributo acima }

Ixi kara, acabei esquecendo a hora aqui, tenho que ir, vê se consegui entender o problema, se não por favor me corrija.

Falows

Eh entaum, eu pensei nisso! Mas ai eu acho q sai do conceito!
Pq um Fundo não tem um cliente como um atributo!

Isso q ta me torrando o cérebro

Entendi.

Então, fica tranqüilo que também estará certo fazendo desse modo (Fundo com um atributo de Cliente), não fica correto vendo por outras questões, mas diante a OOP, é um modo (correto também).

Mas em que momento no fluxo do seu negócio que o sistema iria receber um Fundo, e sua aplicação diante dele teria que saber de qual Cliente ele é?

Bem… depois posta ai como acabou fazendo, e se atendeu ou não.

E ae!

Entaum, acredito q era um erro de conceito msm! Estava conversando com mais gente, e percebi q fundo não é agregação de Cliente.
Por isso minhas informações de movimentos devem vir da classe Fundo.