Método que recebe um objeto genérico ou dois métodos diferentes?
7 respostas
B
Bram_Stocker
Pessoal, estou desenvolvendo um cadastro simples para estudo, usando orientação a objetos, porém cheguei em um ponto que travei!
Fiz o seguinte: uma classe ClienteBEAN e duas classes FisicoBEAN e JuridicoBEAN que herdam os atributos de ClienteBEAN; fiz uma outra classe ClienteDAO, onde tenho os métodos, como por exemplo o método adicionar(xxxxBEAN)…aí que vem a minha dúvida: esse método vai receber um BEAN como cliente físico ou jurídico…tenho que criar então dois métodos adicionar, cada um recebendo objetos diferentes ou um método adicionar recebendo um objeto genérico equivalente as duas classes que herdam de ClienteBEAN?
Olha, a idéia de criar um DAO genérico, inclusive não só para uma hierarquia de objetos, mas para toda a sua aplicação, não é nova, como pode ser visto aqui: https://www.hibernate.org/328.html.
A grande pergunta que vc se deve fazer é: os métodos adicionaCliente, adicionaFisico e adicionaJuridico terão comportamentos (implementações) diferentes? Se sim, você pode escolher entre criar métodos diferentes, ou então toda uma hierarquia de DAOs, com ClienteDAO, e FisicoDAO e JuridicoDAO herdando dele.
A resposta está onde você melhor conseguir reduzir a repetição de código, e ainda permitir uma manutenção fácil. Nada de questões filosóficas, é uma questão de engenharia de software.
Abraços, e boa sorte!
sergiotaborda
Bram_Stocker:
Pessoal, estou desenvolvendo um cadastro simples para estudo, usando orientação a objetos, porém cheguei em um ponto que travei!
Fiz o seguinte: uma classe ClienteBEAN e duas classes FisicoBEAN e JuridicoBEAN que herdam os atributos de ClienteBEAN; fiz uma outra classe ClienteDAO, onde tenho os métodos, como por exemplo o método adicionar(xxxxBEAN)…aí que vem a minha dúvida: esse método vai receber um BEAN como cliente físico ou jurídico…tenho que criar então dois métodos adicionar, cada um recebendo objetos diferentes ou um método adicionar recebendo um objeto genérico equivalente as duas classes que herdam de ClienteBEAN?
Vlw pela atenção pessoal, abs!!
1)Não chame as suas classes com BEAN no final. Primeiro porque não é uma sigla, não tem porque ser maiusculo. Segundo, Entidades não têm sufixos nem prefixos. chame apenas de Cliente, ClienteFisico e ClienteJuridico.
Se o DAO é de Cliente ele deve apenas aceitar Cliente. Logo o método deve ser adicionar(Cliente cliente). Dentro do método, se necessário, vc destingue se é fisico ou juridico. Se quiser pode criar um ClientefisicoDao e um ClienteJuridicoDao a serem chamados apenas de dentro do ClienteDao.
B
Bram_Stocker
sergiotaborda:
Se o DAO é de Cliente ele deve apenas aceitar Cliente. Logo o método deve ser adicionar(Cliente cliente). Dentro do método, se necessário, vc destingue se é fisico ou juridico. Se quiser pode criar um ClientefisicoDao e um ClienteJuridicoDao a serem chamados apenas de dentro do ClienteDao.
Vlw fbdo pela resposta! é bem por aí msm…estou tentando encontrar a melhor forma de aproveitar a modelagem que fiz…
Uma coisa sergio que não compreendi…se recebo um objeto do tipo cliente, adicionar(Cliente cliente) como irei utilizar os atributos de um clienteFisico por exemplo, que tem atributos específicos?
Abs!!
sergiotaborda
Bram_Stocker:
sergiotaborda:
Se o DAO é de Cliente ele deve apenas aceitar Cliente. Logo o método deve ser adicionar(Cliente cliente). Dentro do método, se necessário, vc destingue se é fisico ou juridico. Se quiser pode criar um ClientefisicoDao e um ClienteJuridicoDao a serem chamados apenas de dentro do ClienteDao.
Vlw fbdo pela resposta! é bem por aí msm…estou tentando encontrar a melhor forma de aproveitar a modelagem que fiz…
Uma coisa sergio que não compreendi…se recebo um objeto do tipo cliente, adicionar(Cliente cliente) como irei utilizar os atributos de um clienteFisico por exemplo, que tem atributos específicos?
entenda que usar isntanecof é um sinal de que algo está errado na sua modelagem.
Mas jpa que vc quer fazer assim, então um codigo semelhante ao anterior resolve seu problema.
el_loko
Não entendi porque usar o instanceof é um sinal de algo errado na modelagem. Poderia me explicar?
sergiotaborda
el_loko:
sergiotaborda:
entenda que usar isntanecof é um sinal de que algo está errado na sua modelagem.
Mas jpa que vc quer fazer assim, então um codigo semelhante ao anterior resolve seu problema.
Não entendi porque usar o instanceof é um sinal de algo errado na modelagem. Poderia me explicar?
Porque vc explicitamente viola o encapsulamento tentando determinar a qual classe pertence aquele objeto.
Codigo OO é suposto não precisar disso.
Existem momentos em que instanceof é necessário, como na implementação de equals, mas usá-lo para destinguir entre classes tipo um swicth de classes normalmente indica violação de principios de OO.
No caso em epigrafe a solução deveria passar por abstrair o mecanismo de persistencia a um nivel onde a diferença entre cliente fisico e juridico é irrelevante.
B
Bram_Stocker
E ae pessoal!!
Desculpa a demora pra responder…agradeço a tds pela ajuda!! foi muito esclarecedor sergio, agora tenho uma noção mais clara de como seguir…estou fazendo alguns testes e logo postarei os resultados!! abs!!