Dúvida sobre persistência de objetos de uma classe Moeda  XML
Índice dos Fóruns » Arquitetura de Sistemas
Autor Mensagem
rodrigoy
GUJ Ranger
[Avatar]

Membro desde: 18/04/2006 01:06:28
Mensagens: 758
Localização: São Paulo
Offline

Este é um ótimo exemplo para demonstrar que um value object possui comportamentos (operações de negócio). Este pattern é confundido com o DTO.


Rodrigo Yoshima
www.ASPERCOM.com.br

Próximas Turmas:
São Paulo: Scrum 28/agosto | OOAD-UML 13/setembro

Débito Técnico Blog: blog.aspercom.com.br
[WWW]
okara
JavaTeenager

Membro desde: 16/05/2005 08:47:08
Mensagens: 152
Offline

Neste caso é iteressante armazenar o simbolo monetário u alguma informação dizendo qual a moeda utilizada ?
Como vocês fazem isto ?
Nunca trabalhei em um projeto que necessitasse disto.
David
JavaEvangelist
[Avatar]

Membro desde: 18/03/2005 13:10:33
Mensagens: 450
Localização: Natal/RN
Offline

Se você for trabalhar com moedas diferentes é necessário sim você dizer qual a moeda que vai usar. Eu pensei em um atributo do tipo java.util.Currency, como falei antes, mas não sei se seria viável ou como ele seria armazenado no banco.

David Pereira
Engenheiro de Computação - UFRN
Mestre em Engenharia Elétrica
Doutorando em Engenharia Elétrica
[WWW]
sudeval
JavaGuru
[Avatar]

Membro desde: 08/06/2005 09:48:30
Mensagens: 213
Localização: Fortaleza/CE
Offline

Galera vcs que trabalham com BigDecimal, um colega meu disse que o ejb nao dava "mapeamento" para BigDecimal e sim apenas para Double, ainda é assim ou ja tem suporte para BigDecimal tbem ? senão so da pra usar Double mesmo é isso ?
Ironlynx
Moderador
[Avatar]

Membro desde: 02/05/2003 01:06:41
Mensagens: 3515
Localização: The other side of the screen
Offline

Se você for trabalhar com moedas diferentes é necessário sim você dizer qual a moeda que vai usar. Eu pensei em um atributo do tipo java.util.Currency, como falei antes, mas não sei se seria viável ou como ele seria armazenado no banco.


Geralmente eu uso um código + ou - assim(pego em koders.com):

Mas não tem muito jeito se vc precisar de muuitas casas decimais e/ou mexer com double para alguma coisa...Uso sempre BigDecimal, mas custa em velocidade...
Eu também tenho problemas quando eu penso no que(que tipo Monetário ou Numérico) inserir no banco quando o assunto é dinheiro.

Não basta persistir...tem que prevalecer!
Ironlynx
Anarquista de Sistemas
http://osereojava.blogspot.com/
[WWW]
BiraBoy
JavaChild
[Avatar]

Membro desde: 26/10/2006 11:52:14
Mensagens: 149
Localização: Natal
Offline

No caso da classe moeda blz. Todas as respostas dadas ao David se encaixam.

Mas andei relendo a matéria da Mundo Java 17 com o artigo do Phillip e pensei sobre a classe Categoria do exemplo. Ela é um Value Object (DDD, Evans), blz.

Mas pensando no banco, como persistir? Porque:

- Pensando que são categorias repetitivas (uma categoria chamada "normal" com teto "1000" e máximo de parcelas "10" como no exemplo da revista)
- E se categoria for desmembrada apenas em campos do banco da mesma tabela que possui essa categoria seguindo essa metodologia de mapeamento OR.

Então teremos um banco sem normalização.

É isso mesmo? Ou Categoria não é na verdade um Value Object?

Ou tem outro jeito de ter uma tabela para categoria e categoria não se repetir no banco e ao mesmo tempo ser Value Object?

There are only 10 kinds of people in the world: those who understand binary and those who don't.
pcalcado
Moderador
[Avatar]

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

Antes de mais nada não poste outra mensagem apenas para fazer up no seu post. O GUJ nãot em SLA e este tipo de atitude é desaconselhado pela moderação.

Você está confundindo conceitos sobre o que é um Domain Model e o que é persistência em um banco relacional. Ser um Value Object não diz como as instâncias serão persistidas (ou se serão persistidas) então a forma como você persiste os dados não influencia em algo ser um Value Object ou não.

Pelo que entendi do seu texto você pergunta se teríamos dois registros iguais na tabela. A resposta, como quase sempre, é depende do que você quer fazer, mas -novamente- não é porque você tem um value object que precisa ser assim. Nada impede que você tenha vários Value Objects absolutamente iguais em memória mas que sejam persistidos em apenas um registro no banco de dados.

A forma com que objetos são transformados em tabelas e vice-versa não influencia (teoricamente) em Domain-Driven Design.

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]
Emerson Macedo
Virtual Machine Man
[Avatar]

Membro desde: 01/08/2006 16:55:28
Mensagens: 689
Localização: Rio de Janeiro - RJ
Offline

@BiraBoy
Existe uma thread recente sobre esse assunto da persistência dos Value Objects. (Que inclusive você chegou a postar nele)

http://www.guj.com.br/posts/list/68206.java

@Phillip
Só para esclarecer, eu concordo com você que Persistência nada tem a ver com Domain Driven Design. Porém, quando estamos aprendendo DDD e vamos implementar algum projeto pra valer, chega na hora de persistir as classes geradas com os conceitos dessa abordagem e é normal que haja uma dúvida/confusão/falta de conhecimento. Aconteceu comigo recentemente e eu aprendi o que fazer. Então, acho que apesar de serem coisas distintas, quando em um projeto real pra quem ta começando no DDD é sempre bom esclarecer.

This message was edited 3 times. Last update was at 30/10/2007 09:46:08


Emerson Macedo Leite
PMP - Ping-pong Master Player
CSM - Counter-Strile Manager
http://codificando.com

"Porque, assim como o relâmpago sai do oriente e se mostra até o ocidente, assim será também a vinda do filho do homem." - Mateus 24:27
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
BiraBoy
JavaChild
[Avatar]

Membro desde: 26/10/2006 11:52:14
Mensagens: 149
Localização: Natal
Offline

Primeiramente me perdoem os moderadores pela avidez (ps: o que é SLA?)

Minha dúvida é bem específica. Voltando ao exemplo da classe Categoria do seu exemplo, Phillip.

Pensando que considero Categoria, na modelagem de domínio, um Value Object (DDD, Evans). E considerando que na minha solução específica quero que na persistência em banco ele fique numa tabela própria para que não se repita e fique assim normalizado.

Qual estratégia de mapeamento OR com hibernate se usa neste caso, nesta decisão?

Minha dúvida específica é essa.

Mais uma vez perdão

Ah emerleite é que eu quis aproveitar o tópico do David porque ele citou o exemplo da revista Mundo Java na qual surgiu minha dúvida

This message was edited 1 time. Last update was at 30/10/2007 11:04:13


There are only 10 kinds of people in the world: those who understand binary and those who don't.
pcalcado
Moderador
[Avatar]

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

Você pode utilizar um id artificial que só serve como índice da tabela e para fazer relacionamentos. Ser um Value Object não indica que a classe não vá ter uma chave primária quando persistida num banco de dados relacional.

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]
BiraBoy
JavaChild
[Avatar]

Membro desde: 26/10/2006 11:52:14
Mensagens: 149
Localização: Natal
Offline

Então nesse caso, no hibernate eu deixo de mapear como component (que seria o caso da classe Moeda) e e mapeio como entidade normal, né?

There are only 10 kinds of people in the world: those who understand binary and those who don't.
Emerson Macedo
Virtual Machine Man
[Avatar]

Membro desde: 01/08/2006 16:55:28
Mensagens: 689
Localização: Rio de Janeiro - RJ
Offline

No caso vai ser sua escolha.
Da uma lida no post que eu te passei que lá o Sergio explicou direitinho.

Emerson Macedo Leite
PMP - Ping-pong Master Player
CSM - Counter-Strile Manager
http://codificando.com

"Porque, assim como o relâmpago sai do oriente e se mostra até o ocidente, assim será também a vinda do filho do homem." - Mateus 24:27
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
 
Índice dos Fóruns » Arquitetura de Sistemas
Ir para:   
Powered by JForum 2.1.8 © JForum Team