Modelagem PessoaFisica,PessoaJuridica,Cliente usando Hibernate  XML
Índice dos Fóruns » Arquitetura de Sistemas
Autor Mensagem
pcalcado
Moderador
[Avatar]

Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline

Porque não seria coerente uma interface? Vai depender do que você espera de um Proprietario. Usar interfaces geralmente é melhor, tanto do ponto de vista técnico (proxies dinâmicos, hrança múltipla) quanto de modelagem (você especiica um comportamento e não uma implementação). Usar uma superclasse para esta relação geralmente só é vantagem quando ela não é abstrata e/ou já possui um bom candidato dentro suas classes, não precisa criar ma classe só para isso.

Mas tendo ou não uma interface a ergunta e: qual a vantagem em ter uma lista na superclasse? A uperclasse deve contêr coisas que são caracteristicas de todos os seus filhos, ter uma lista é uma delas? Voltando ao exemlo da interface, será que o que você precisa não é apenas que a classe tenha um método que retorna o(s) telefone(s)? Será que é tão importante como isso é implementado?

Os dados específicos ficam nas filhas, apesar que eu não conheço seu modelo o suficiente para achar que vcê deva ter essa herança de qualquer modo.

Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay
[Email] [WWW] [Yahoo!] [MSN]
_filipe
Thread.start()
[Avatar]

Membro desde: 27/07/2007 18:44:13
Mensagens: 31
Offline

Legal cara, bacana

Entendi aonde quer chegar, ja imaginava que seria dificil ter uma resposta sem lhe enviar a modelagem do sistema e as especificações ...

Mas me ajudou muito ...

Agora, suponhamos que eu utilize interface para a pessoa, é possível mapear isso no hibernate ?

Quero dizer, eu precisarei criar uma tabela Pessoa !?

This message was edited 1 time. Last update was at 05/01/2008 23:18:20

pcalcado
Moderador
[Avatar]

Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline

Você não persiste a interface, persiste a implementação. Pro ORM não importa.

Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay
[Email] [WWW] [Yahoo!] [MSN]
_filipe
Thread.start()
[Avatar]

Membro desde: 27/07/2007 18:44:13
Mensagens: 31
Offline

uhnm cara,

então complicou, pq de acordo com a minha duvida no contexto Pessoa Juridica, Pessoa Fisica e Telefones, eu tinha pensado em um modelo fisico de banco de dados mais ou menos assim:

Pessoa
- id (pk)
- nome

PessoaFisica
- Pessoaid (fk)
- dataNascimento

PessoaJuridica
- PessoaId (fk)
- cnpj

Telefones
- id
- pessoaId (fk)
- numero

vou ter que pensar em outra modelagem agora ... algo mais proximo de:

PessoaFisicaTelefones
- pessoaFisicaId
- TelefoneID
- Tipo


certo ?

This message was edited 1 time. Last update was at 05/01/2008 23:27:31

_filipe
Thread.start()
[Avatar]

Membro desde: 27/07/2007 18:44:13
Mensagens: 31
Offline

Se fizer algo parecido com o citado acima, eu vou ter tantas tabelas no meu banco de dados ... que vai ser complicadisso manter ...

tnaires
GUJ Master
[Avatar]

Membro desde: 22/12/2003 08:05:58
Mensagens: 1678
Localização: Porto Alegre/RS - Natal/RN
Offline

Filipe, você se preocupa muito com banco de dados!
Estude um framework de persistência ORM e você verá que nunca mais precisará desenvolver um banco de dados.
Abraços

Tarso Nunes Aires

Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires

_filipe
Thread.start()
[Avatar]

Membro desde: 27/07/2007 18:44:13
Mensagens: 31
Offline

Então

Em minhas aplicações eu uso o hiberbante mais alguns outros patterns como DAO e etc ...

Pelo oque ouvi dizer, frameworks de persistencia ORM não são aconselhaveis para uso em aplicações complexas.

Tipo, voce teria alguma dica de um framework de persistencia ORM ? O hibernate não seria um !? Se sim, como não me preocupar com o banco de dados?
sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline

_filipe wrote:Se fizer algo parecido com o citado acima, eu vou ter tantas tabelas no meu banco de dados ... que vai ser complica disso manter ...



por isso que você não vai manter. Você vai deixar algum framework manter.
Afinal vc está fazendo java ou programação-de-banco-de-dados-disfarçado-de-java ?

Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
_filipe
Thread.start()
[Avatar]

Membro desde: 27/07/2007 18:44:13
Mensagens: 31
Offline

Entao, quando quiz dizer manter, não foi pensando na aplicação, e sim no banco de dados.

Realmente, estou preocupado com o banco de dados, pois estou pensando em objetos e no mapeamento do mesmo com as tabelas do meu banco. (É errado pensar assim?)

abras
tnaires
GUJ Master
[Avatar]

Membro desde: 22/12/2003 08:05:58
Mensagens: 1678
Localização: Porto Alegre/RS - Natal/RN
Offline

_filipe wrote:Pelo oque ouvi dizer, frameworks de persistencia ORM não são aconselhaveis para uso em aplicações complexas.

O que seriam aplicações complexas? Particularmente, eu nunca ouvi falar dessas limitações do Hibernate. Mas não posso falar que já vi aplicações críticas utilizando-o.
_filipe wrote: Tipo, voce teria alguma dica de um framework de persistencia ORM ? O hibernate não seria um !? Se sim, como não me preocupar com o banco de dados?

Sim, o Hibernate é um exemplo.
_filipe wrote:Se sim, como não me preocupar com o banco de dados?

Não é que você não tenha que se preocupar com o banco, e sim, você não precisa se preocupar em desenvolvê-lo. Você constrói o seu modelo utilizando suas classes e se preocupa apenas com ele. Modificações que por ventura venham a ser necessárias no seu modelo refletirão diretamente no banco de dados.

Tarso Nunes Aires

Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires

_filipe
Thread.start()
[Avatar]

Membro desde: 27/07/2007 18:44:13
Mensagens: 31
Offline

Uhnm ... entendi

beleza

valeu galera



tnaires
GUJ Master
[Avatar]

Membro desde: 22/12/2003 08:05:58
Mensagens: 1678
Localização: Porto Alegre/RS - Natal/RN
Offline

Veja este livro excelente sobre Hibernate (um dos autores é o criador do framework, Gavin King).
Abraços

Tarso Nunes Aires

Blog - http://cabritin.wordpress.com/
Delicious - http://delicious.com/tnaires
Twitter - @tnaires

Quinger
JavaTeenager
[Avatar]

Membro desde: 17/07/2007 15:06:34
Mensagens: 161
Offline

_filipe


Sempre fiz da seguinte maneira.

Faz uma classe Pessoa com (Id, Nome, DtRegistro, Endereco endereco, Telefone[] tel) dai por herança(extends) vc faz sua PessoaFisica e PessoaJuridica.

dai no hibernate vc mapeia a PessoaFisica e PessoaJuridica, como elas estão herdando as propriedades de Pessoa o hibernate já reconhece os atributos.

Leandro Quingerski
Apollo Tecnolgia da Informação
[Email] [WWW]
Alessandro Lazarotti
Virtual Machine Man
[Avatar]

Membro desde: 21/01/2004 14:12:54
Mensagens: 719
Offline

Na minha opinião, uma interface ou implementação chamada simplesmente "Pessoa" só deveria existir em um sistema, se existir uma entidade chamada ExtraTerrestre ou Animal que possa entrar em conflito de comportamento com a tal "Pessoa".

Pessoa é algo muito genérico, posso estar enganado mas fatalmente essa modelagem possa ser modelada ao ponto de ficar mais clara.

... Lezinho
------------------------
twitter: @lazarotti
http://alessandrolazarotti.wordpress.com/
http://jbossbrasil.org/

[Email] [MSN]
Joaquimnabuco
What is classpath?

Membro desde: 15/09/2007 05:32:14
Mensagens: 8
Offline

Com todo respeito e sem querer causar polemicas, vejo muita gente se preocupando em generalizar o maximo seu DAO, estudando afoitamente hibernate e o pior de tudo se gabando por estão programando em poo. Novamente não quero causar polemica pelo contrario, onde eu quero chegar é que existe uma lacuna enorme entre uma modelagem bem feita e o uso de framework e conceitos ddd. Vejo professores de faculdade usando o exemplo de pessoafisica herda pessoa e pseesoajuridica herda pessoa e na próxima aula mostrando hibernate e o conceito de DAO(que é outro ?erro? pois não vejo vantagem em ter um DAO com hibernate já que o mesmo pode fazer o papel do de DAO, a menos que não tenhamos um SGDB e sim um outro mecanismo de armazenagem de dados, bom mas isso é um outro assunto), se um professor usa esse exemplo de modelagem ?ridícula?, não precisa nem ensinar DAO.

Voltando ao problema, acho muito importante debatermos o assunto desse tópico pois não vale nada usarmos poo sem ter uma modelagem apropriada. Minha humilde opnião:
1 não existe pessoafisica e nem pessoajuridica
2 existe sim Pessoa, pense em pessoa como um ser humano
3 existe sim empresa, pense em empresa como um prédio(parece obvio)
4 Esqueça cpf e cnpj como conceito que separam uma pessoa de uma empresa, o que separa uma pessoa de uma empresa é o fato de pessoa ser uma pessoa, ou melhor ter ou não comportamento diferente de uma empresa. A outro detalhe cpf e cnpj são identificações somente aqui no Brasil, mais uma razão para esquecer pf e pj.

A melhor maneira, acho, é começar a modelar pela utilização de pessoa ou empresa dentro do sistema. Bom seu sistema é de venda, então seu sistema terá um cliente, cliente terá um comportamento certo, daí pergunto, qual a diferença quando na loja que usa o sistema o cliente que compra ser uma pessoa ou uma empresa?
Se nenhuma, então simplesmente crie uma interface cliente, daí crie uma person que implementa cliente. Para saber se a person é uma pessoa ou uma empresa crie um método person.isEmpresa. daí aqui não teremos a classe pessoa e nem empresa, mto menos PJ e PF.
Agora se sim, existe diferença entre uma pessoa compra ou uma empresa(lembrando que quem compra é um cliente), por exemplo, o calculo de desconto de uma empresa é diferente de uma pessoa a sim crie duas classes. Empresa implementa cliente e Pessoa implementa cliente. Para venda não importa se cliente é ou não empresa, mas para o sistema sim. Daí quando a venda for calcular por exemplo Cliente.meudesconto(produto) vai usar aqui poliformismo e sim fara sentido ter 2 classes, empresa e pessoa. Lembrando novamente que não existe cadastro de pessoa e empresa e sim de clientes, para o sistema dificilmente vai existir o papel de pessoa e empresa e sim cliente.

Acho que minha explicação ficou meio complica, desculpas, bom se esse assunto fomentar, ?posto ? novamente.


 
Índice dos Fóruns » Arquitetura de Sistemas
Ir para:   
Powered by JForum 2.1.8 © JForum Team