| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/06/2005 13:22:36
|
Mauricio Linhares
Moderador
![[Avatar]](/images/avatar/97af07a14cacba681feacf3012730892.jpg)
Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline
|
Sei lá, o caso não é usar ou não patterns, é não procurar meter patterns onde eles não foram chamados
Colocar toda a coleção do "Padrões de Projeto" ou da coleção do Martin Fowler, não vai resolver o problema, é só ver o que o mestre Jedi Gamma falou:
http://www.artima.com/lejava/articles/gammadp.html
Sobre as transações, a parada seria mais ou menos o seguinte, imagine que você tem que, antes de confirmar uma venda, garantir que o cartão do cliente é válido, a transação da venda só pode ser concluída quando você obtiver a resposta da prestadora dizendo que está tudo "livre".
O que você faz? Diz pro cliente que a compra está aguardando confirmação e deixa alguém esperando pela mensagem (olha o JMS aqui ó), quando a mensagem chegar, você vê se tá liberado ou não e "termina" a transação. Isso é um caso onde a transação não está no banco de dados. Mas como o Phillip disse, se a transação é só no banco, ela deveria estar dentro dos seus DAOs, não precisa se extender não.
|
Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr
Screencast de Introdução a linguagem Objective-C |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/07/2005 17:09:23
|
Fabio Kung
JavaEvangelist
Membro desde: 08/03/2004 08:24:47
Mensagens: 445
Localização: São Paulo
Offline
|
Maurício Linhares wrote:Mas como o Phillip disse, se a transação é só no banco, ela deveria estar dentro dos seus DAOs, não precisa se extender não.
Desse modo, como não cair no anti-pattern "transaction (session) per operation" ?
|
Procurando por oportunidades de emprego?
OndeTrabalhar.com
OndeTrabalhar.com Java?
http://blog.caelum.com.br
Fabio Kung
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/07/2005 17:15:49
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline
|
Olá
Você pdoe manter a transação aberta se seu DAO possuir informação de estado. A questão é que não há porque essa transação deixar a camada de persistência.
|
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/07/2005 17:29:21
|
Mauricio Linhares
Moderador
![[Avatar]](/images/avatar/97af07a14cacba681feacf3012730892.jpg)
Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline
|
FcK wrote:
Maurício Linhares wrote:Mas como o Phillip disse, se a transação é só no banco, ela deveria estar dentro dos seus DAOs, não precisa se extender não.
Desse modo, como não cair no anti-pattern "transaction (session) per operation" ?
Olha, se você tá numa aplicação web, guarda a sessão e a transação em uma thread local e fecha com um filtro no fim do serviço, se você tá numa aplicação desktop usa aspectos pra pegar o fim de um método de serviço qualquer e fecha a sessão e a transação (também em uma tread local).
E qual o problema de se ter "transaction per operation" quando você está usando um pool de conexões? Elas não vão ser abertas e fechadas a todo o instante, eu acredito que o impacto seja mínimo dentro do sistema.
Outra coisa Phillip, como é que dá pra controlar isso usando estados no Dao, eu chamo um método qualquer pra "fechar" tudo no dao quando terminar?
|
Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr
Screencast de Introdução a linguagem Objective-C |
|
|
 |
|
|