EXCECOES

JABA 30/05/2012 17:13:37
#403169
Olá pessoal, Boa tarde!

Gostaria de saber qual a melhor maneira de trabalhar com exceções.

por exemplo:

public sub adicionar(novoitem as item)

try
dim item as item = me.localizarItem(novointem) [ô]Este metodo lanca uma excecao senao encontrar o item desejado
if item is nothing then
[ô]Caso nao encontre, ele cria o item
criarItem(item)
else
[ô]Caso ele encontre, ele só incrementa
incrementarItem(item)
end if
catch ex as exception
[ô]Aqui existe uma duvida. O correto é trabalhar a mensagem para o usuario final aqui ou na camada de apresentacao?
throw ex
end try

end sub

ou


public sub adicionar(novoitem as item)

try
dim item as item = me.localizarItem(novointem) [ô]Este metodo lanca uma excecao senao encontrar o item desejado
[ô]Se chegar aqui é porque o item foi localizado
incrementarItem(item)
catch ex as ItemNaoEncontradoexception [ô]Aqui eu ja coloquei a excecao do metodo localizar
criarItem(item)
[ô]Aqui existe uma duvida. O correto é trabalhar a mensagem para o usuario final aqui ou na camada de apresentacao?
throw ex
end try

end sub

Alguem poderia me ajudar com as boas praticas quando o assunto é Excecao?

Muito Obrigado pessoal. vlw
KERPLUNK 30/05/2012 21:56:25
#403183
Resposta escolhida
Fiz um artigo sobre isso uns tempos atrás...
MORPHEGAN 31/05/2012 09:10:06
#403208
tehno a mesma dúvida, já pensei em criar um projeto que controle as exceções, assim importaria a DLL desse projeto em todos os outros.
Assim as mensagens seriam padronizadas, porém em qual camada é a melhor pra validar os erros? Acho que deve ser em todas, mas pode acontecer um erro na de BD que explode 3 erros
KERPLUNK 31/05/2012 15:22:04
#403272
Já deram uma lida no artigo que citei?
JABA 31/05/2012 15:44:11
#403279
Já sim, muito bom KerpLunk.

Mas onde que eu devo lançar as mensagens para o usuario final ?

vlw
KERPLUNK 31/05/2012 15:53:08
#403283
Depende de como vai tratar. O ideal é fazer o tratamento em todas as camandas, com as exceptions específicas para cada erro(se quiser, até mesmo as personalizadas), e na última camada, a de apresentação tratar todos as exceptions que todos os métodos de todas as camadas subsequentes podem lançar. As camadas que tem uma camada [Ô]superior[Ô], devem sempre lançar a exception para a mesma, para que a informação de debug seja precisa.
JABA 31/05/2012 16:13:15
#403284
Entao quer dizer que eu tenho que tratar todas as excecoes (mesmo que seja umas 20) na camada de apresentacao, gerando uma mensagem diferente para cada excecao ou eu posso resumir tudo numa unica mensagem na camada de apresentacao?

vlw
KERPLUNK 31/05/2012 16:17:17
#403286
Você pode simplesmente tratar [Ô]Exception[Ô] sem ser uma exception específica na camada principal(desde que nas camadas subsequentes, as exceções também sejam tratadas e lançadas), mas isso vai fazer o tratamento menos eficiente. Você pode criar as suas próprias exceções e ter um tratamento mais específico, por exemplo, uma exceção [Ô]ProdutoNaoEncontradoException[Ô], quando ela chegar na camada principal, vai estar bem claro o problema e com isso o tratamento fica mais eficiente.
JABA 31/05/2012 16:55:13
#403292
Na pergunta inicial que eu fiz (a mensagem do topico criada) é mais correto eu tratar a criacao de um obj (criarItem(item)) pela excecao ou é mais indicado eu verificar por if como na primeira opcao?

vlw
KERPLUNK 31/05/2012 23:34:40
#403316
Citação:

Na pergunta inicial que eu fiz (a mensagem do topico criada) é mais correto eu tratar a criacao de um obj (criarItem(item)) pela excecao ou é mais indicado eu verificar por if como na primeira opcao?


Bem, tratamento por blocos de decisão, não são 100% seguros, pois apesar de ser possível prever todos os erros possíveis em um determinado procedimento, isso daria mais trabalho do que fazer um tratamento de exceção genérico. Blocos de decisão podem falhar, sempre há a possibilidade de um erro ocorrer e uma exceção não tratada ser lançada.
Seria interessante prever o máximo de situações possíveis usando blocos de decisão, mas isso não exclui a necessidade de tratamento de exceções, ainda que genérico.
JABA 01/06/2012 15:28:39
#403341
KerpLunk, agradeço pelas dicas, foi sensacional.

Muito obrigado
vlw
Tópico encerrado , respostas não são mais permitidas