Olá pessoal,
Primeira vez que estou postando aqui no fórum
Venho tentando aprender java e estou com dúvida em um tópico.
Quero modelar algumas classes básicas de um banco para fins de aprendizado.
Nesse banco eu preciso de informações de conta, agencia, cliente… etc
Minha dúvida é na relação de Conta com Agência.
Inicialmente eu poderia resolver o problema colocando uma atributo
String nomeAgencia
na classe Conta. Porém, eu também quero ter mais informações da agência como o endereço por exemplo, o que levaria a criação da classe Agencia
.
O problema é que me parece estranho se eu tiver em Agencia
uma lista de Conta
s e em Conta
eu tiver um atributo do tipo Agencia
, onde já existe uma lista de contas:
class Agencia {
String nome;
Endereco endereco;
List<Conta> contas; // Possui uma lista de contas.
}
class Conta {
int numero;
double saldo;
Agencia agencia;
}
No momento não estou preocupado com o banco de dados (embora logo eu provavelmente precisarei me preocupar). Mas gostaria de opiniões mais experientes sobre esse tipo de problema.
Pesquisando sobre o assunto encontrei algumas discussões sobre referencias ciclicas mas não consegui assimilar com o meu exemplo.
A que mais pareceu uma boa ideia era criar uma terceira classe que de fato seria responsável por essa associação das duas classes.
Porém no meu exemplo que é muito simples, caso eu crie uma classe somente para isso, sem atributos ou comportamentos que justifiquem sua própria existência, sinto que não estou aplicando a orientação a objetos, mas sim olhando para o problema como se fosse um banco de dados relacional, onde criamos uma tabela associativa para resolver o problema.
Algum tempo atrás li sobre o padrão repository, onde podemos criar repositórios para classes que são raiz de agregação. No meu exemplo seria interessante usar algo assim para a classe Agencia
?
Visto que uma Conta
seria um agregado de Agencia
, me parece uma boa saída que respeita a navegabilidade entre elas: Pergunto pro repositorio de Agencia qual são as contas de uma determinada agência, necessitando seguir essa direção para chegar em uma conta, pois conta sem agencia não faz sentido.
Nesse caso na Conta
eu não teria um atribulo que me levasse para a Agencia
. (Apenas lí sobre o repository, não apliquei de fato em nenhum caso real)
É um caminho interessante? Quais outras abordagens poderiam ser úteis? Entendo que não existe um único jeito certo, então gostaria de mais dicas ou materiais sobre esse tipo de cenário.
Desde já agradeço a todos