| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/11/2011 10:30:05
|
rponte
JavaEvangelist
![[Avatar]](/images/avatar/37a90a1fe7512a804347fa3e572c6b86.png)
Membro desde: 18/02/2008 10:06:25
Mensagens: 413
Offline
|
Concordo com o ruivo, provavelmente a sua regra está no lugar errado - mas isso é apenas a visão minimalista que tenho do seu modelo de negócios.
No mais, talvez seja melhor colocar no repositório de Vendas ou Pedidos, novamente depende.
Se ainda assim você tiver necessidade e interesse que a regra continue na sua entidade produto, aconselho você tentar umas das alternativas abaixo:
1) Use a anotação @Formula - http://stackoverflow.com/questions/2986318/calculated-property-with-jpa-hibernate ;
2) Passe um repositório para o método getter, algo como produto.getDataDaUltimaVenda(repositorio) ;
Um abraço.
ruivo wrote:
danilo.magrini wrote:
Aqui é onde entra as enormes discussões sobre arquitetura. Ao meu ver é responsabilidade sim do Produto saber a dataUltimaVenda, pois se isso fere o princípio da responsabilidade única então teriamos que ter objetos ProdutoCodigo, ProdutoDescricao, ProdutoPreco, ProdutoUnidade, etc;
De maneira alguma. O que é uma venda? Nada mais é que um pedido finalizado. E é um pedido que tem um produto, não o contrário. Pensa numa garrafa. Ela não tem gravada nela quando foi vendida. Agora, se pensar na nota fiscal, lá estarão as referências para os produtos que foram vendidos, com as datas e valores pagos pelo consumidor.
Se você quiser saber qual a data que um produto foi vendido pela última vez, você deve perguntar para os pedidos (ou notas fiscais) qual a última vez que aquele produto aparece, e não perguntar pro produto quando ele foi vendido, que não faz muito sentido.
|
Rafael Ponte
http://www.rponte.com.br/ |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/11/2011 11:15:05
|
gus.ehr
What is classpath?
![[Avatar]](/images/avatar/97ae5fa6838e3ca65bde8eadb3d64e19.jpg)
Membro desde: 02/03/2011 19:53:39
Mensagens: 5
Localização: Indaiatuba - SP
Offline
|
edilmar wrote:Isso é um dilema de arquitetura mesmo. Na minha opiniao, a data da ultima venda é uma regra de negocio, como tambem data da ultima compra, media de preco vendida, meses onde ocorre maior venda, etc. Para usar estas informacoes calculadas em uma table ou um relatorio, o melhor seria fazer estes calculos e possiveis acessos ao BD em uma classe DAO, que retornasse, por ex., uma lista de produtos com data de ultima venda. Eu inclusive crio uma classe auxiliar e faco no DAO um "SELECT new classeAuxiliarXXX(lista de campos) FROM... WHERE...", e nas tables/relatorios uso a classe auxiliar, pois fica facil acessar todos os campos, que podem vir de Produto, Venda, Cliente, etc.
Acho que essa solução é um bom "meio termo".
Sem ser totalmente purista, mas também sem perder performance.
Uma coisa a se pensar é se essa data aparece em muitos lugares ou é só em algum relatório específico.
This message was edited 1 time. Last update was at 30/11/2011 11:15:30
|
[]'s
Gustavo Ehrhardt |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/11/2011 12:28:38
|
danilo.magrini
HelloWorld
Membro desde: 26/04/2011 08:09:57
Mensagens: 14
Offline
|
rponte wrote:Concordo com o ruivo, provavelmente a sua regra está no lugar errado - mas isso é apenas a visão minimalista que tenho do seu modelo de negócios.
No mais, talvez seja melhor colocar no repositório de Vendas ou Pedidos, novamente depende.
Se ainda assim você tiver necessidade e interesse que a regra continue na sua entidade produto, aconselho você tentar umas das alternativas abaixo:
1) Use a anotação @Formula - http://stackoverflow.com/questions/2986318/calculated-property-with-jpa-hibernate ;
2) Passe um repositório para o método getter, algo como produto.getDataDaUltimaVenda(repositorio) ;
O caso 1) é na minha opinião a melhor opção mas o provedor de persistência deveria ser o Hibernate
O caso 2) é uma boa opção pois mesmo que não utilize repositórios poderia implementar um somente para esse caso, porém o nei.junior deverá avaliar se isso é viável pra ele ou não.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/11/2011 12:46:47
|
nei.junior
JavaChild
Membro desde: 11/12/2008 15:57:03
Mensagens: 101
Localização: SP
Offline
|
rponte wrote:Concordo com o ruivo, provavelmente a sua regra está no lugar errado - mas isso é apenas a visão minimalista que tenho do seu modelo de negócios.
No mais, talvez seja melhor colocar no repositório de Vendas ou Pedidos, novamente depende.
Se ainda assim você tiver necessidade e interesse que a regra continue na sua entidade produto, aconselho você tentar umas das alternativas abaixo:
1) Use a anotação @Formula - http://stackoverflow.com/questions/2986318/calculated-property-with-jpa-hibernate ;
2) Passe um repositório para o método getter, algo como produto.getDataDaUltimaVenda(repositorio) ;
Um abraço.
É, no caso de usar o @Formula, seria uma boa. Porém aqui utilizo EclipseLink e já procurei algo parecido para fazer e não achei.
Mas quero agradecer todos que deram sugestões. Com base em tudo isso, vou analisar e ver qual a melhor forma de implementar aqui.
Pelo que vi, não tem certo ou errado, e sim a forma que melhor se encaixar no projeto.
Quem tiver mais ideias ou sugestões, compartilhe se possível !
Obrigado a todos.
|
Mojarra 2.1.7, Facelets, Glassfish V3.1.2, EclipseLink 2.3.2, Primefaces 3.2, NetBeans 7.1.1
Nei Alcantara Jr.
http://twitter.com/NeiAlcantaraJr
"Tudo aquilo que algum idiota diz que é urgente, é algo que um imbecil não fez em tempo hábil e quer que você se ferre para fazer em tempo recorde." |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/12/2011 16:41:57
|
victorcosta
JavaGuru
![[Avatar]](/images/avatar/42c88875bb90aeed57f01609fef5d9d7.png)
Membro desde: 07/01/2007 01:29:37
Mensagens: 220
Localização: Recife - PE
Offline
|
Eu prefiro uma entidade rica que tem o get que informa isso fazendo consulta no banco mas o padrão que costumam usar no Java é entidade burra então faz um método no DAO que calcula isso
Uma opção extra seria você desnormalizar o banco armazenando a data da última venda em uma coluna de produto e gerenciando essa coluna na aplicação ou via trigger. De quebra vc ainda resolve seu problema de poder ter um get no Produto informando isso
As vezes é necessário desnormalizar por questões de performance, não há nada de errado nisso. Ninguém por exemplo escreve um software de fórum e faz count(*) pra exibir o número de tópicos e posts do fórum, isso é armazenado em uma coluna na entidade Forum
Com o modelo desnormalizado vc não teria que fazer 20 queries adicionais caso listasse os produtos junto com a data de ultima venda. Ou então se tivesse um índice nessa coluna um relatório de produtos que tivessem data X como última venda seria instantâneo. Analise suas necessidades
|
Meu blog com tutoriais de jQuery
http://www.victorcisneiros.com/blog/
Outros projetos
http://www.todolistr.com
http://www.bibliasocial.com
http://www.dota2feedback.com/
http://www.posjogo.com.br/ |
|
|
 |
|
|
|
|