| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/11/2011 07:48:48
|
nei.junior
JavaChild
Membro desde: 11/12/2008 15:57:03
Mensagens: 101
Localização: SP
Offline
|
Pessoal, bom dia !
Considerem o exemplo abaixo:
No método "getDataUltimaVenda" o correto seria fazer um "FOR" e ficar procurando qual seria a última data de venda e retorná-la. Porém tenho o receio que isso com o tempo possa ficar lento, porque o número de pedidos irá aumentando com o tempo.
Uma solução seria fazer uma busca no banco de dados, porém não devo fazer acesso ao banco a partir das minhas classes de domínio.
Gostaria de sugestões de como resolver isso ?
Exemplo das classes:
|
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) 30/11/2011 08:00:05
|
alissonvla
GUJ Master
Membro desde: 17/04/2006 15:29:07
Mensagens: 1491
Offline
|
cara,
vc pode fazer um select max data pedido, vc pode ter no seu DAO uma sql normal, que nao necessite usar hql ou criteria.
T+
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/11/2011 08:08:51
|
nei.junior
JavaChild
Membro desde: 11/12/2008 15:57:03
Mensagens: 101
Localização: SP
Offline
|
alissonvla wrote:cara,
vc pode fazer um select max data pedido, vc pode ter no seu DAO uma sql normal, que nao necessite usar hql ou criteria.
T+
Vlw pela resposta.
Mas então cara, tanto faz ser hql, criteria ou não. Isso não mudaria em nada.
A questão é, como fazer isso no "get" que esta dentro do produto sem ferir a camada e ficar fazendo "FOR" ? Pois teoricamente essa seria forma correta.
|
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) 30/11/2011 08:13:44
|
alissonvla
GUJ Master
Membro desde: 17/04/2006 15:29:07
Mensagens: 1491
Offline
|
entao,
eu no meu caso faria esse seu caso passando pela camada de negocio e depois camada de persistencia, não colocaria isso direto na sua entidade.
t+
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/11/2011 08:22:08
|
Lindberg
JavaEvangelist
![[Avatar]](/images/avatar/a18aa23ee676d7f5ffb34cf16df3e08c.jpg)
Membro desde: 02/05/2006 19:23:53
Mensagens: 363
Offline
|
uma dica, não sei se vale pra vc
eu faço assim
Select minhadata From tabela Order By minhadata desc Limit 1;
|
Aqui... A turma é D+++. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/11/2011 08:24:12
|
danilo.magrini
HelloWorld
Membro desde: 26/04/2011 08:09:57
Mensagens: 14
Offline
|
alissonvla wrote:entao,
eu no meu caso faria esse seu caso passando pela camada de negocio e depois camada de persistencia, não colocaria isso direto na sua entidade.
t+
nei.junior e alissonvla
Essa sugestão seria uma solução, porém ao meu ver não fica tão OO quanto se estivesse dentro da entidade, a não ser que suas entidades sejam apenas objetos de valor (o que daria outra discussão enorme). Além disso, se colocar isso na camada de negócio ou persistência eu ainda vejo uma dificuldade caso você tenha que exibir uma lista (uma table por exemplo) com os atributos do seu produto e se esse valor 'dataUltimaCompra' tiver que ser listado, terá um certo trabalho para poder exibir isso.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/11/2011 08:27:36
|
nei.junior
JavaChild
Membro desde: 11/12/2008 15:57:03
Mensagens: 101
Localização: SP
Offline
|
danilo.magrini wrote:
nei.junior e alissonvla
Essa sugestão seria uma solução, porém ao meu ver não fica tão OO quanto se estivesse dentro da entidade, a não ser que suas entidades sejam apenas objetos de valor (o que daria outra discussão enorme). Além disso, se colocar isso na camada de negócio ou persistência eu ainda vejo uma dificuldade caso você tenha que exibir uma lista (uma table por exemplo) com os atributos do seu produto e se esse valor 'dataUltimaCompra' tiver que ser listado, terá um certo trabalho para poder exibir isso.
Exatamente, concordo com o que o danilo.magrini disse.
|
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) 30/11/2011 08:33:16
|
alissonvla
GUJ Master
Membro desde: 17/04/2006 15:29:07
Mensagens: 1491
Offline
|
cara,
eu penso no seu caso, como se fosse uma regra de negocio e não uma propriedade de uma entidade.
esse é meu pensamento.
t+
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/11/2011 08:34:45
|
fantomas
GUJ Master
![[Avatar]](/images/avatar/a2bf57c3aee957f2aaf75aa84717b3be.jpg)
Membro desde: 24/04/2008 16:10:55
Mensagens: 1534
Localização: Terra (maior parte do tempo)
Offline
|
Começo a pensar que o método getDataUltimaVenda não deva estar na classe Produto, o que acham?
flws
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/11/2011 08:35:54
|
ruivo
JavaChild
Membro desde: 23/08/2003 10:18:09
Mensagens: 102
Localização: Curitiba-PR
Offline
|
Vamos lá então. Você não quer ferir o seu modelo e isso é o correto a se fazer.
Entretanto, vejo um grande problema no seu modelo, que é o Produto ter q saber quando ele foi vendido pela última vez. Ao meu ver, isso vai contra a aquele princípio da responsabilidade única (SRP).
O modelo que eu faria é o seguinte: ter um outro objeto que, dado um produto, ele saiba responder quando aquele produto foi vendido pela última vez. Mais ou menos assim
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/11/2011 08:42:37
|
fantomas
GUJ Master
![[Avatar]](/images/avatar/a2bf57c3aee957f2aaf75aa84717b3be.jpg)
Membro desde: 24/04/2008 16:10:55
Mensagens: 1534
Localização: Terra (maior parte do tempo)
Offline
|
nei.junior wrote:Exatamente, concordo com o que o danilo.magrini disse
Acho que vc irá afetar seu modelo incluindo uma responsabilidade de outros objetos relacionados a view.
flws
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/11/2011 08:44:26
|
alissonvla
GUJ Master
Membro desde: 17/04/2006 15:29:07
Mensagens: 1491
Offline
|
e pra mim, tudo que envolve sql, faz parte da regra de negocio.
t+
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/11/2011 08:46:19
|
danilo.magrini
HelloWorld
Membro desde: 26/04/2011 08:09:57
Mensagens: 14
Offline
|
ruivo wrote:Vamos lá então. Você não quer ferir o seu modelo e isso é o correto a se fazer.
Entretanto, vejo um grande problema no seu modelo, que é o Produto ter q saber quando ele foi vendido pela última vez. Ao meu ver, isso vai contra a aquele princípio da responsabilidade única (SRP).
[/code]
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;
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/11/2011 08:53:54
|
ruivo
JavaChild
Membro desde: 23/08/2003 10:18:09
Mensagens: 102
Localização: Curitiba-PR
Offline
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/11/2011 08:57:17
|
edilmar
Java Ninja
Membro desde: 30/12/2003 11:14:08
Mensagens: 277
Localização: Campo Grande/MS
Offline
|
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.
|
SubMacro Project Owner
http://submacro.dev.java.net/ |
|
|
 |
|
|