Tenho uma classe Pedido, e nesse pedido vai ter um Cliente e um Funcionario vinculados, os atributos de Cliente e Funcionario são iguais, com exceção que Funcionario possui ‘login’ e ‘senha’, e na classe Endereco eu colocaria 2 composições(Cliente cliente, Funcionario func) ? pois funcionario tem um endereco e cliente tbm tem um endereco…e o certo seria um endereço ter um cliente ou um funcionario.
(EDIÇÃO)
Assim se encaixaria? fiz um enum de perfis pra controlar com o Spring Security
Não. Cliente e Funcionario são entidades com histórias totalmente independentes. No mínimo ficariam em módulos bem separados, ou como ocorre na maioria das empresas, em sistemas separados, sob gestões diferentes. Não acople as coisas só porque a estrutura de dados tem algo em comum.
staroski2 likes
A resposta já está no questionamento: Funcionario tem um atributo do tipo Endereco e Cliente também tem um atributo do tipo Endereco.
Não vejo necessidade de usar herança, mas se quiser realmente utilizar, crie uma classe abstrata Pessoa, com os atributos comuns para ambos, como por exemplo o endereco. Cliente estende Pessoa. Funcionario também estende Pessoa e define ainda os atributos login e senha.
Henrique_Santos2
Ai como eu faria na classe Endereco? adicionaria 2 composições? Endereço tem um cliente e um endereço, daí um desses seria null?
javaflex1 like
Endereço não tem um Cliente.
Tudo depende dos requisitos do negócio. Se Cliente pode ter um ou mais endereços. Se Funcionário tem um ou mais endereços.
daí um desses seria null
Não entendi, isso não parece fazer sentido.
Dragoon
Agora alguém disse tudo, qual é a sua regra de negócio, qual é o seu contexto, o que você deseja implementar?
um Pedido teria uma Mesa, Funcionario e Cliente vinculados, o cliente seria opcional, caso o Cliente queria se identificar no pedido…
javaflex
Se o requisito for: um Cliente pode ter um ou mais endereços, entao crie ClienteEndereco ou EnderecoCliente, como quiser, mas sem misturar com Funcionario.
O mesmo para Funcionário (FuncionarioEndereco), se realmente precisar de vários endereços, caso contrário coloca o endereço direto em Funcionario.