Hoje em dia, alguns programadores estão deixando de utilizar o try, catch e finally; e na minha percepção eles estão tendo excesso de confiança no código desenvolvido. A grande questão aqui é que algum erro pode acontecer de forma inexperada e que não está no controle do programador como: cabo de rede fora, internet não funcionando, erro em HD, erro no SSD, erro de hardware em geral e muito mais.
O link da referência [1] mostra um pequeno exemplo de como trabalhar com os campos que conseguem pegar os erros. E com os erros pegos, o programador pode tratar os dados para não fechar o programa ou mostrar algo ruim para o usuário. Passando para a parte de tratar o erro dado, é importante saber como pegar o erro, como gravar e como tratar.
Quando o erro é gravado em algum local, muitas das vezes o progrador precisa saber qual o método que deu erro, ou qual foi o problema. É bom saber a linha, o motivo, o erro e mais. Uma das soluções é pegar o nome do método, pegar o nome da classe e o motivo do erro.
O código 1 mostra dentro do exception como pegar o nome do método, o nome da classe e todos os motivos.
Código 1 - Pegando o nome do método, classe e o motivo
public DataTable buscaAlunosParaEnvioDeEmail(AlunoDTO dto)
{
try
{
return _alunoDAO.buscaAlunosParaEnvioDeEmail(dto);
}
catch (Exception ex)
{
var metodo = this.GetType().FullName + "." + System.Reflection.MethodBase.GetCurrentMethod().Name.ToString();
var classe = this.GetType().Name.ToString();
throw new Exception("Atenção: aconteceu um erro na classe: " + classe + " e método: " + metodo + ", tente novamente. <Br> Erro: " + ex.Message.ToString() + ex.Source.ToString() + ex.StackTrace.ToString(), ex.InnerException);
}
}
A primeira linha dentro do Exception é responsável por pegar o nome do método de forma completa.
Código 2 - Pegando o nome do método.
var metodo = this.GetType().FullName + "." + System.Reflection.MethodBase.GetCurrentMethod().Name.ToString();
Response.Write(this.GetType().FullName.ToString());
Veja o resultado da impressão e o que o código imprime é bem simples.
Para pegar o nome da classe, isso é necessário para que o programador saiba onde é a classe que deu problema. Como o projeto pode ser grande e muitos desenvolvedores mexeram, é bom identicar a classe também. Para identificar a classe é bem mais simples.
Código 3 - Pegando o nome da classe
var classe = this.GetType().Name.ToString();
No final de tudo, é necessário gerar uma Exception descrevendo cada detalhe. Isso porque os dados postados como erro precisam ser explicados já que tem o nome da classe e nome do método, precisamos pegar a descrição e o tipo do erro, na verdade, todas as informações necessárias.
throw new Exception("Atenção: aconteceu um erro na classe: " + classe +
" e método: " + metodo + ", tente novamente. <Br>
Erro: " + ex.Message.ToString() + ex.Source.ToString() + ex.StackTrace.ToString(), ex.InnerException);
Note que existe ainda o ex.Message, ex.Source, ex.StackTrace e ex.InnerException. A mensagem é a do sistema ou código fonte, o source é a fonte do problema, o statcktrace mostra cada linha traçada e o InnerException é a excessão causada naquela excessão.
Com tudo isso, você consegue saber qual classe, qual problema, qual foi o método e o que deu errado. Onde é muito importante no momento que o cliente te mostra a página de erro. O mais importante é gravar tudo isso de erro e deixar uma mensagem amigável ao seu cliente.
Espero que tenha ajudado e qualquer dúvida pode entrar em contato pelo site www.mauriciojunior.org.
Referências