Como tratar pessoa fisíca e juridica + cliente que pode ser os dois?

Java

22/03/2012

Boa tarde,

Relaciomaneto (Pessoa fisica e juridica) até ai tudo bem, o problema está
em ligar o cliente(Porque ele pode ser os dois)


até o momento estou fazendo desse jeito


public abstract class Pessoa {
.......
}

public class Fisica extends Pessoa {
........
}

public class Juridica extends Pessoa {
........
}


A duvida vem agora e cliente que pode ser os dois?
eu vi em outros forum que o melhor é usar composição?Seria essa a maneira de resolver esse problema?


Fico no aguardo de uma ajuda


Thiago Volpato

Thiago Volpato

Curtidas 0

Respostas

Robson Teixeira

Robson Teixeira

22/03/2012

Iae tiago blz
so pergunta quais são os requisitos de sua app para que você diferencie pessoa fisica de pessoa juridica pois pelo que sei a mesma pessoa pode ter um cpf e um cnpj o que respectivamente destaca pessoa fisica e juridica.

att
robson
GOSTEI 0
Thiago Volpato

Thiago Volpato

22/03/2012

Robson,

Eu preciso diferenciar por que na minha aplicação o cliente pode ser tanto pessoa física como jurídica
e eu andei vendo nos fóruns esse assunto gera muita polémica mas ninguém fala ou da uma opinião clara
de como pode ser feito

Nesse caso como devo usar obter a pessoa física e jurídica para minha classe cliente que pode ser tanto um como outro?

Att
GOSTEI 0
Davi Costa

Davi Costa

22/03/2012

Na entidade cliente vc mantém uma pessoa (que pode ser física ou jurídica) - composição mesmo é a melhor saída.

Att Davi
GOSTEI 0
Dyego Carmo

Dyego Carmo

22/03/2012

Deu certo ?

Valeu !
GOSTEI 0
Thiago Volpato

Thiago Volpato

22/03/2012

Problema resolvido

Usei Herança com a estratégia JOINED

Valeu
GOSTEI 0
Thiago Volpato

Thiago Volpato

22/03/2012

Boa tarde,

Eu estou usando Herança JOINED e não tinha pensando em cliente(podendo ser Fisico ou juridico)
agora bateu a duvida...

Tem como eu fazer isso sem perder minha herança?

e se for usar composição como poderia nesse caso.


Herança:

classe Pessoa
classe Fisico extends Pessoa
Classe Juridica extends Pessoa


e a classe Cliente como ficaria podendo ser os dois?

Fico no aguardo



GOSTEI 0
Robson Teixeira

Robson Teixeira

22/03/2012

Na sua classe que vai representar a venda basta você criar o seguinte atributo onde esse atributo pode ser tanto Pessoa Fisica quanto Juridica.

public class Venda{
private Pessoa cliente;
// get,set e os demais atributos omitidos.
}

espero ter ajudado
att
robson
GOSTEI 0
Thiago Volpato

Thiago Volpato

22/03/2012

Robson,

então o problema está na classe Cliente ainda

como que eu vou tratar ela do jeito que está a minha aplicação hoje.

Lembrando:
Tenho uma herança onde tenho Pessoa e estendo ela para as classes Fisico e Juridica.

e minha aplicação precisa ter esse nível de abstracao.

Qual é a melhor maneira de eu implementar meu Classe cliente nela?




GOSTEI 0
Davi Costa

Davi Costa

22/03/2012

Como já citei vc pode usar composição, dentro de Cliente vc teria um atributo pessoa, que dependendo do que o usuário interagisse na aplicação poderia ser pessoa física ou jurídica (pois os dois estendem de pessoa).

att Davi
GOSTEI 0
Thiago Volpato

Thiago Volpato

22/03/2012

Deixaria dessa maneira certo


public class Client implements Serializable{

	private static final long serialVersionUID = 1L;
	
	@Id
	private Long id;
        
          
	private Pessoa pessoa;


como eu faria a escolha? Pessoa Física ou Jurídica?
e teria mapeamento OneToOne?

GOSTEI 0
Thiago Volpato

Thiago Volpato

22/03/2012

A classe Pessoa não pode conhecer Cliente certo?

tem como você me passa um exemplo simples
de como eu teria os atributos da classe
Pessoa Física e Jurídica para o cadastro do cliente
GOSTEI 0
Davi Costa

Davi Costa

22/03/2012

Além dos atributos de pessoa, para facilitar vc teria que ter alguma coluna que defina se é pessoa fisica ou juridica.
em pessoa física e/ou juridica, na teria que ter o id da tabela pessoa. Então pronto, ao pegar o id de pessoa vc vai nas tabelas filhas e vai saber se é um ou outro. Porém com essa coluna auxiliar vc diminuiria esse join, pois vc já olharia logo p ela p saber se é umou outro

att Davi
GOSTEI 0
Thiago Volpato

Thiago Volpato

22/03/2012

Davi,

o problema está ai, por que eu vou herdar apenas os atributos da classe Pessoa

mas como estou usando herança eu dividi os atributos correspondente as classe Fisica e Juridica

e inserindo apenas a classe Pessoa como atributo eu não tenho acesso aos atributos das demais
e outra coisa a classe pessoaFisica e jurídica são superClass

entendeu a dificuldade
GOSTEI 0
Davi Costa

Davi Costa

22/03/2012

Já pensou em usar os atributos transients em Cliente que contemplem os atributos de fisica e juridica?

att Davi
GOSTEI 0
Thiago Volpato

Thiago Volpato

22/03/2012

transient não é persistido certo
não vejo o pq usar isso
tem exemplo para me mostrar
GOSTEI 0
Davi Costa

Davi Costa

22/03/2012

vc pode popular esses campos (transients de cliente) na tela pelo usuário e passar esses valores para um objeto física ou juridica (conforme o usuário escolheu)... persistir ele isoladamente e no cliente antes de persistir vc dá um set em pessoa, passando essa pessoa fisica pou jurídica que foi persistida anteriormente... n vai ter problema pois as filhas estendem do pai que é um pessoa (mesmo tipo de atributo do cliente)

Não tem como ser mais claro do que isso, mas calma.. que logo vc vai pegar a idéia

att Davi
GOSTEI 0
Thiago Volpato

Thiago Volpato

22/03/2012

vamos ver se eu entendi

na minha classe Pessoa eu tenho apenas 3 atributos blz até ai,

dai na classe Cliente iria criar todos os atributos que tem em fisica e juridica
anotando todas como transient

e la no bean(Face) no metodo salvar daria em Set em Pessoa

é isso?
GOSTEI 0
Davi Costa

Davi Costa

22/03/2012

é por ai

att Davi
GOSTEI 0
Robson Teixeira

Robson Teixeira

22/03/2012

Completando a maneira que eu queria lhe mostrar(o que o davi lhe mostrou está correto) segue um modelo de classe venda com 2 métodos.

public class Venda{
private Pessoa cliente;

public boolean isClientePessoaFisica(){
return cliente instanceOf Fisica;
}
public boolean isClientePessoaJuridica(){
return cliente instanceOf Juridica;
}
}

com esses 2 métodos ambos vão lhe informar se o cliente é pessoa fisica ou pessoa juridica.

espero que com esses 2 métodos lhe auxilie a enxegar um caminho diferente.
att
robson

GOSTEI 0
Davi Costa

Davi Costa

22/03/2012

essa solução do robson é excelente para akele campo auxiliar que sugeri... só mais uma dica se seguir minha dica, épreciso submeter a Pessoa primeiro depois setar esse atributo em cliente e depois submeter cliente.

att Davi
GOSTEI 0
Thiago Volpato

Thiago Volpato

22/03/2012

Davi estou tentando

Duvidas:

1 - estendo a classe Pessoa em Cliente
2 - Criar todos os atributos na classe Cliente sendo transient?
3 - No ManageBean no metodo salvar dar um setPessoa?

esse setPessoa que está dificil





GOSTEI 0
Davi Costa

Davi Costa

22/03/2012

Cliente não estende pessoa, cliente possui um atributo pessoa.
Criar em cliente como transient apenas os atributos especificos de p fisica e jurídida.
Para no seu bena vc instanciar essa pessoa específica, salvar no banco primeiro essa pessoa específica e depois dar um set em cliente:
Ex. pessoa física
PessoaFisica pf = new PessoaFisica();
//preenche os campos dela conforme o usuário interagiu na tela
save(pf);

depois pega Cliente e dá um set:
cliente.setPessoa(pf); // devido pf estender pessoa não terá problemas aqui

save(cliente)

att Davi
GOSTEI 0
POSTAR