Até aqui tudo bem, as quando eu fui desenvolver a classe de repositorio para cliente fiquei sem saber como fazer. Eu uso interface para implementar o repositorio.
Alguém poderia passar alguma dica de como implementar o repositorio? A minha duvida é o repositorio vai usar a classe Cliente ou a classe ClientePessoaFisica, e ou ClientePessoaJuridica ? Terei q fazer duas interface? A classe repositorio deve implementar qual das classes ? Se eu for ter que fazer dois repositórios uma para cada
classe não vejo a vantagem da herança na camada de entidade.
Agradeço por um exemplo ou manual ou documentação.
Vc já deu alguma olhada nos padrões de projeto VO (Value Object), DTO (Data Transfer Object), Java Bean e similares?
Acredito que vale a pena uma pesquisada…
Diante desta situação, eu faria o seguinte:
/** interface comum a todos os cadastros */publicinterfaceCadastro{publicbooleanincluir(Objectobjeto);publicbooleanexcluir(intcodigo);publicbooleanalterar(Objectobjeto);}/** classe abstrata Cliente, nunca chamada de forma direta, sempre indiretamente através de subclasses */publicabstractclassCliente{privateintid;privateStringnome;privateStringendereco;// outros atributos comuns a clientes físicos e juridicos// seus respectivos getters e setters}/** classe concreta, filha da Cliente e utilizada pela camada de persistencia (DAOs, VOs, outros) esta classe possui todos os atributos da classe Cliente, além de suas caracteristicas exclusivas */publicclassClientePessoaFisicaextendsCliente{privateStringcpf;privateStringrg;// outros atributos// seus respectivos getters e setters}/** classe concreta, filha da Cliente e utilizada pela camada de persistencia (DAOs, VOs, outros) esta classe possui todos os atributos da classe Cliente, além de suas caracteristicas exclusivas */publicclassClientePessoaJuridicaextendsCliente{privateStringcnpj;privateStringrazao_social;// outros atributos// seus respectivos getters e setters}/** classe concreta, que por obrigacao tem de implementar todos os métodos comuns a qualquer cadastro esta classe tem a funcao de realizar apenas o cadastro de CLIENTES cadastros de PRODUTOS, FORNECEDORES e outros são realizados em outras classes que também devem implementar Cadastro */publicclassCadastroClienteDAOimplementsCadastro{publicbooleanincluir(Clientecliente){// incluir cliente, seja ele pessoa física ou juridica}publicbooleanexcluir(intcodigo){// excluir cliente pelo id, atributo comum a toda subclasse de Cliente// no caso ClientePessoaFisica ou ClientePessoaJuridica}publicbooleanalterar(Clientecliente){// alterar cliente, seja ele pessoa física ou juridica}}/** utilizando a DAO em alguma parte do seu fonte preferenciamente na camada de negocios */publicclassCadastroBO{// exemplo de utilizacaopublicbooleanefetuarCadastro(Clientecliente,Produtoproduto){Cadastrocadastro=newCadastroClienteDAO();cadastro.incluir(cliente);cadastro=newCadastroProdutoDAO();cadastro.incluir(produto);// efetua um cadastro, seja ele de produto ou cliente, devido a interface// o cadastro pode ser de cliente físico ou juridico, assim como de qualquer tipo de produto e suas caracteristicas}}