| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/09/2008 15:47:11
|
Giulliano
GUJ Master
![[Avatar]](/images/avatar/7f5a17b792b687fc4c227a5c5e569dd8.jpg)
Membro desde: 14/11/2006 19:29:38
Mensagens: 1627
Localização: São Paulo
Offline
|
Resolvi dar um jeito no famoso NullPointerException, não em todo contexto de uma aplicação, mas especificamente em nossos beans (Classes com métodos GET e SET, padrão de nomenclatura javabean).
Através de AOP todo método getXXX que retornar um objeto com referência nula receberá uma nova instância do seu tipo de retorno.
PRÓS: Evita NullPointerExceptions e gera uma saída no console para que o programador esteja ciente que foi evitado uma exceção desse tipo ao invés de parar a aplicação e jogar uma pilha de erros pro JVM.
CONTRA: Pode gerar confusão na cabeça do programador, quando valores de saída forem diferentes daquilo que ele esperava.
Agora espero as críticas..rss..
[]'s
Fontes aspectJ
Fontes Reflection
|
Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi
<UnTouChAbLe> |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/09/2008 17:09:41
|
wariows
JavaGuru
![[Avatar]](/images/avatar/87da3a68e40336b5aaed42e34be59e3b.jpg)
Membro desde: 03/11/2006 02:27:43
Mensagens: 206
Offline
|
A Pergunta principal é: Será que devemos lutar conta o null?
Eu acho que ao invés de se preocupar com os nulls, você deve se preocupar em garantir uma pós-condição especificada por você quando a pré-condição é garantida. Ao invés de lutar contra o null, lutar contra valores fora do que você considera válido. Estes parâmetros válidos são contratos.
Design By Contract by Wikipedia
[]´s
This message was edited 1 time. Last update was at 25/09/2008 17:10:05
|
"Tudo o que você precisará quando o universo acabar é de uma toalha"
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/09/2008 08:44:44
|
Giulliano
GUJ Master
![[Avatar]](/images/avatar/7f5a17b792b687fc4c227a5c5e569dd8.jpg)
Membro desde: 14/11/2006 19:29:38
Mensagens: 1627
Localização: São Paulo
Offline
|
Concordo com vc q a luta contra o null ao mesmo tempo desobedece o trato de pós-condição, porém precisamos ver o que é mais importante dentro do escopo do sistema. Eu prefiro q meus clientes vejam valores errados e me alertem sobre isso do que ver uma bela exceção de NullPointerException (considerando que muitas sistemas não tratam as exceções e nem criam página de erros)
|
Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi
<UnTouChAbLe> |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/09/2008 08:48:39
|
wariows
JavaGuru
![[Avatar]](/images/avatar/87da3a68e40336b5aaed42e34be59e3b.jpg)
Membro desde: 03/11/2006 02:27:43
Mensagens: 206
Offline
|
Giulliano wrote:Concordo com vc q a luta contra o null ao mesmo tempo desobedece o trato de pós-condição, porém precisamos ver o que é mais importante dentro do escopo do sistema. Eu prefiro q meus clientes vejam valores errados e me alertem sobre isso do que ver uma bela exceção de NullPointerException (considerando que muitas sistemas não tratam as exceções e nem criam página de erros)
Valores errados podem passar desapercebido, exceções não. Isso é fato.
Se o sistema não trata das exceções com páginas de erros e mensagens úteis para o usuário, é bom implementar isso ao invés de mascarar os erros. Pelo menos é o que eu acho.
[]'s
|
"Tudo o que você precisará quando o universo acabar é de uma toalha"
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/09/2008 08:53:20
|
Giulliano
GUJ Master
![[Avatar]](/images/avatar/7f5a17b792b687fc4c227a5c5e569dd8.jpg)
Membro desde: 14/11/2006 19:29:38
Mensagens: 1627
Localização: São Paulo
Offline
|
Respeito sua opnião cara...mas como vc disse no final da sua frase...é o que vc acha...
Eu acho melhor que a plicação continue rodando sem desvios. E valores não podem passar desapercebidos se a pessoa esiver atenta ao que esta fazendo... Mas aí tb já entra em opniões pessoais...
|
Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi
<UnTouChAbLe> |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/09/2008 08:57:15
|
wariows
JavaGuru
![[Avatar]](/images/avatar/87da3a68e40336b5aaed42e34be59e3b.jpg)
Membro desde: 03/11/2006 02:27:43
Mensagens: 206
Offline
|
Giulliano wrote:Respeito sua opnião cara...mas como vc disse no final da sua frase...é o que vc acha...
Eu acho melhor que a plicação continue rodando sem desvios. E valores não podem passar desapercebidos se a pessoa esiver atenta ao que esta fazendo... Mas aí tb já entra em opniões pessoais...
Tipo... Se eu tenho um valor no meu banco de dados que é not null. Daí numa transação qualquer, esse null é evitado (com essa sua solução) e é colocado um branco no lugar... Imagine que esse campo é de extrema importância para a minha aplicação, e sem ele provavelmente nada funcionará.
Se veio null, algum problema aconteceu, e a transação deve ser cancelada e deve acontecer um rollback. Se vier branco, a transação vai continuar normalmente e vai ser dado o commit. Você não acha que tem alguma coisa estranha aí?
|
"Tudo o que você precisará quando o universo acabar é de uma toalha"
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/09/2008 09:08:46
|
Giulliano
GUJ Master
![[Avatar]](/images/avatar/7f5a17b792b687fc4c227a5c5e569dd8.jpg)
Membro desde: 14/11/2006 19:29:38
Mensagens: 1627
Localização: São Paulo
Offline
|
Então mas aí você iria perceber isso né ??? afinal é uma informação de extrema importância.
Nesse caso eu acho q poderia ser gerada uma mensagem para o usuário (supondo q vc use JSF) alertando- que foi inserido um valor me branco ou um avloar igual a zero pois o campo tal não foi preenchido. A idéia warriors não é ficar preenchendo campo nulo, mas sim evitar que a aplicação desvie do seu fluxo.
Realmente tem muitos prós e muitos contras. Eu ouvi dizer que no Java 7 eles vão dar um jeito no NullPointerException, mas não li nada sério ainda foram apenas especulações por enquanto.
|
Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi
<UnTouChAbLe> |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/09/2008 09:28:28
|
Ssalgado
JavaTeenager
Membro desde: 11/04/2005 12:51:05
Mensagens: 199
Offline
|
Eu realmente não entendo qual o grande problema do NullPointerException.
Como o wariows falou, você deve esconder uma null pointer do usuário, mas não do desenvolvedor. Vendo o erro sabemos o que tá errado.
Muitas vezes os erros mais difíceis de encontrar são os erros idiotas, tipo um campo com um valor que não foi atribuído.
Uma vez dei manutenção no código em ASP/VB que era uma loucura, milhares de linhas, código espaguete, e lá no meio, bem escondidinho num arquivo asp tínhamos uma bela linha: "On Error Resume Next". beleza, escondeu o erro do usuário, mas de nós também.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/09/2008 09:46:21
|
Giulliano
GUJ Master
![[Avatar]](/images/avatar/7f5a17b792b687fc4c227a5c5e569dd8.jpg)
Membro desde: 14/11/2006 19:29:38
Mensagens: 1627
Localização: São Paulo
Offline
|
Ssalgado wrote:Eu realmente não entendo qual o grande problema do NullPointerException.
Como o wariows falou, você deve esconder uma null pointer do usuário, mas não do desenvolvedor. Vendo o erro sabemos o que tá errado.
Muitas vezes os erros mais difíceis de encontrar são os erros idiotas, tipo um campo com um valor que não foi atribuído.
Uma vez dei manutenção no código em ASP/VB que era uma loucura, milhares de linhas, código espaguete, e lá no meio, bem escondidinho num arquivo asp tínhamos uma bela linha: "On Error Resume Next". beleza, escondeu o erro do usuário, mas de nós também.
Verdade hein...esconder o erro é coisa de noob....por isso eu disse q gero uma saída no console e se prefirir até na interface da aplicação
|
Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi
<UnTouChAbLe> |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/09/2008 09:48:54
|
wariows
JavaGuru
![[Avatar]](/images/avatar/87da3a68e40336b5aaed42e34be59e3b.jpg)
Membro desde: 03/11/2006 02:27:43
Mensagens: 206
Offline
|
Giulliano wrote:
Ssalgado wrote:Eu realmente não entendo qual o grande problema do NullPointerException.
Como o wariows falou, você deve esconder uma null pointer do usuário, mas não do desenvolvedor. Vendo o erro sabemos o que tá errado.
Muitas vezes os erros mais difíceis de encontrar são os erros idiotas, tipo um campo com um valor que não foi atribuído.
Uma vez dei manutenção no código em ASP/VB que era uma loucura, milhares de linhas, código espaguete, e lá no meio, bem escondidinho num arquivo asp tínhamos uma bela linha: "On Error Resume Next". beleza, escondeu o erro do usuário, mas de nós também.
Verdade hein...esconder o erro é coisa de noob....por isso eu disse q gero uma saída no console e se prefirir até na interface da aplicação 
Fazer o mesmo sem mascarar a NullPointerException seria o ideal.
|
"Tudo o que você precisará quando o universo acabar é de uma toalha"
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/09/2008 14:50:05
|
peerless
GUJ Master
![[Avatar]](/images/avatar/5b2a8f2b014bb326fd82ee313704e78c.jpg)
Membro desde: 22/01/2007 14:52:26
Mensagens: 1391
Localização: Porto Alegre / RS
Offline
|
Qual a diferença disso para uma NPE ? Continua sendo um erro do programador, certo?
|
follow me
pitacos
"The most problems that teams face are about communication, and all the others are too." - Dan North
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/09/2008 16:47:42
|
Giulliano
GUJ Master
![[Avatar]](/images/avatar/7f5a17b792b687fc4c227a5c5e569dd8.jpg)
Membro desde: 14/11/2006 19:29:38
Mensagens: 1627
Localização: São Paulo
Offline
|
peerless wrote:Qual a diferença disso para uma NPE ? Continua sendo um erro do programador, certo? 
Continua sendo erro do progrmador...mas a questão discutida não é essa. E sim uma maneira de se trabalhar isso.
|
Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi
<UnTouChAbLe> |
|
|
 |
|
|