Bom dia.
Pessoal estou trabalhando em um projeto de desenvolvimento conforme o diagrama que eu anexei aqui. Porém eu estou com um problema na implementação dessas classes, mais precisamente na camada de persistencia (DAO). O cenário é o seguinte.
No meu domain eu tenho: A classe Pessoa e a partir dela extendem PessoaFisica e PessoaJuridica, e a partir de PessoaFisica eu tenho mais duas extensões Funcionario e Profissional.
Até ai tudo bem. A partir do meu model, eu fui criando as outras camamdas: Crie as interfaces para o PessoaDAO, e a partir desta interface, eu a implemento na classe PessoaDAOJPA. Depois tenho a minha camada de regas de negócio que chamo de Service que inclui a uma Interface (PessoaService) e uma implementação da mesma.
ENtão começam os problemas. Na verdade na camada de persistência. No PessoaDAOJPA, eu tenho um método de consulta, onde eu passo um paramentro STRING, dai ele faz uma pesquisa por nome ou por CPF. POrém esse método não faz sentindo existir no PessoaDaoJPA porque na minha query o Entity Pessoa não possui esses atributos. Blz, então eu faço uma pesquisa usando a Entity PessoaFisica, dai vem a pergunta ou colocação. Faz sentido eu ter um método que pesquisa uma pessoa física que retorna uma PessoaFisica na classe PEssoaDAOJPA, visto que não é responsabilidade da PEssoaDAOJPA?
Faz sentindo eu criar uma PessoaFisicaDAOJPA somente com as implementações especifica dela? Se fizer como é que eu posso retornar um Funcionario ou Profissional? Faz sentindo eu fazer o meu PessoFisicaDAOJPA extende de PessoaDAO? Se fizer, como o fica o lance de PEssoFisicaDAOJPA, herdar metedos que não são de responsabilidade dele, por exemplo salvarPessoa.
Faz sentido, eu fazer composição injetando PessoaDAOJPA dentro de PEssoaFisica, e assim delegar para o PEssoaDAOJPA o que PessoFisica não sabe fazer?
Alguém poderia me ajduar a encontra uma boa solução sem quebra as boa prática de POO?
Grato