| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/09/2010 21:06:36
|
Dieval Guizelini
Virtual Machine Man
![[Avatar]](/images/avatar/9fc92b9c69b711dcb880ccb743fc6f06.jpg)
Membro desde: 05/07/2006 14:39:44
Mensagens: 570
Localização: Curitiba - PR
Offline
|
Olá
Lendo o artigo:
http://today.java.net/article/2006/04/04/exception-handling-antipatterns
O autor conclui o artigo dessa forma:
"A manipulação de exceção é uma boa maneira para a construção robusta de sistemas. Evitando os antipadrões que descrevemos aqui, ajuda a construir sistemas que são de fácil manutenção, resistentes às mudanças, e que rodam bem com outros sistemas."
Qual dos antipaterns vocês mais encontram nos projetos e quais mais vocês usam?
Ps: eu, em algum momento da vida, já usei quase todos (hahahaha).
|
Sun Certified Java Programmer 5.0 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/09/2010 21:26:12
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Que atire a primeira pedra quem nunca usou uma dessas... eu mesmo, hoje trato as exceptions com carinho. Não porque as ame, mas é porque cansei de apanhar.
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/09/2010 22:27:03
|
garcia-jj
JWizard
Membro desde: 13/04/2009 22:11:50
Mensagens: 2715
Localização: Porto Alegre
Offline
|
O mais bizarro que eu vejo em muitos lugares é esconder a exception:
E em um sistema que herdei tinha em quase todo lugar isso:
Sim, tinha a mensagem "tente mais tarde", hahahaha.
A que eu faço de vez, principalmente em códigos temporário é enjaular em uma RuntimeException:
E outra que eu faço, porém comentando o motivo, é de fazer catch and ignore. Algumas vezes você precisa fazer algo, mas se der erro você pode seguir o baile sem maiores problemas. Algo do tipo, excluir um arquivo, e se der erro pode seguir o código sem se preocupar com isso. Porém nesses casos penso que é necessário documentar.
|
http://github.com/garcia-jj
Não respondo dúvidas via MP. Use o fórum. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/09/2010 22:28:40
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Você pode ignorar exceptions, desde que esse seja o tratamento correto da exception. Ou seja, você parou, analisou, e verificou que aquilo realmente pode acontecer, mas não tem problema.
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/09/2010 02:00:51
|
thiagobaptista
JavaChild
![[Avatar]](/images/avatar/45a5c0d5cf3b363b1c4985f161fbbd98.jpg)
Membro desde: 09/07/2010 15:43:03
Mensagens: 131
Localização: Cidade Maravilhosa / RJ
Offline
|
Eu sempre penso assim, se o cara tá com preguiça de escrever código ou tá com o prazo completa e totalmente estourado, e não quer fazer um tratamento de excessão sério, declarar seus métodos lançando Exception (ao invés de uma excessão mais restrita e que faça mais sentido) é molecagem.
Se é assim, lança logo um Throwable e seja feliz!!
This message was edited 1 time. Last update was at 25/09/2010 02:12:37
|
Thiago Baptista - \\//
contato@thiagobaptista.com
Desenvolvedor Web
Analista Desenvolvedor Java Pleno - DBA Engenharia de Sistemas
Usuário Linux #492635
Você sabe que Java é uma plataforma divertida quando você cria um arquivo Guerra, que referencia uma Jarra, dentro de uma Orelha.
"A vida é bela; que as futuras gerações a livrem de todo mal, opressão e violência, e possam desfrutá-la em sua plenitude..."
-- Leon Trotsky |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/09/2010 02:05:13
|
thiagobaptista
JavaChild
![[Avatar]](/images/avatar/45a5c0d5cf3b363b1c4985f161fbbd98.jpg)
Membro desde: 09/07/2010 15:43:03
Mensagens: 131
Localização: Cidade Maravilhosa / RJ
Offline
|
Aliás, o Eduardo Guerra escreveu um artigo muito bom na revista MundoJa... opa, MundoJ ( ), na mesma linha desse artigo apresentado aqui, chamado "Os 7 habitos das excessões altamente eficases". Foi na MundoJota número 36.
|
Thiago Baptista - \\//
contato@thiagobaptista.com
Desenvolvedor Web
Analista Desenvolvedor Java Pleno - DBA Engenharia de Sistemas
Usuário Linux #492635
Você sabe que Java é uma plataforma divertida quando você cria um arquivo Guerra, que referencia uma Jarra, dentro de uma Orelha.
"A vida é bela; que as futuras gerações a livrem de todo mal, opressão e violência, e possam desfrutá-la em sua plenitude..."
-- Leon Trotsky |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/09/2010 02:13:32
|
Eric Yuzo
GUJ Ranger
![[Avatar]](/images/avatar/eb2af3c11079cf65589c05c5240a1541.png)
Membro desde: 25/10/2009 20:36:30
Mensagens: 956
Localização: São Vicente - SP
Offline
|
Logo que eu aprendi que existiam Exceptions, eu cheguei a fazer controle de fluxo (argh) com eles. hehe
Acho que isso é anti-pattern até dentro da POG.
Falou...
|
O importante mesmo é ser feliz!
DevSV |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/09/2010 09:39:35
|
Dieval Guizelini
Virtual Machine Man
![[Avatar]](/images/avatar/9fc92b9c69b711dcb880ccb743fc6f06.jpg)
Membro desde: 05/07/2006 14:39:44
Mensagens: 570
Localização: Curitiba - PR
Offline
|
Opa,
atualmente eu também prefiro lançar as exceptions para serem tratadas em uma camada mais alta... ao invés de tratá-las em todos os lugares (em algum lugar eu li que tratamento de erro é considerado um tema transversal - da mesma forma que log - e que se espalha rapidamente por toda parte do código).
Ao longo do tempo, ganhei alguns maus habitos, entre eles de criar algumas classes utilitárias para os famosos catch vazios, tais como:
Isso foi uma consequência do uso do findbugs entre outros validadores (http://leepoint.net/notes-java/tools/checkers.html).
fw
|
Sun Certified Java Programmer 5.0 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/09/2010 10:01:59
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Para quem está fora de um servidor web, é bom conhecer o último recurso que o JDK usa antes de estourar com uma exceção. Toda thread tem associada a ela um UncaughtExceptionHandler.
Ele é chamado antes da exceção ser impressa.
Se nenhuma thread registrar esse cara, quem é chamado é o DefaultUncaughtExceptionHandler. Ele é quem faz a impressão da exception no console.
Você pode usar o método: Thread.setUncaughtExceptionHandler para definir um handler por thread. E pode usa o método estático
Thread.setDefaultUncaughtExceptionHandler para sobrescrever o comportamento padrão.
Isso aí é uma maravilha. Usando isso, você nunca mais deixará de logar aquela RuntimeException inesperada. Sem falar que você também irá dar preferência em transformar CheckedExceptions em RuntimeExceptions, uma vez que a partir dái vc ganha o log de graça. A classe utilitária do Dieval só trocaria os
por
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
|
|