Criando sua própria classe exception (encapsulamento) em asp.net c#

(Creating your own exception class (encapsulation) in asp.net c #)

Visitantes webianos, tudo bem?

Este artigo será pequeno, porém muito útil para sua aplicação.

Criar sua própria classe exception encapsulamento a classe exception do framework .net.

Trabalhar com exception de forma estruturada e organizada, otimiza muito as atividades de manutenção, implementação de layout (interface) e entendimento do código. Além de possibilitar a criação de um esquema de log para melhor monitoramento destes exceptions.

Mão na massa:

Minha sugestão é criar uma pasta “Util” dentro de App_Code. E dentro dela pasta “Util” criar seu arquivo contendo sua classe.

Eu uso como padrão de nomenclatura a letra “c” minúsculo antes de qualquer classe, isso para me ajudar nas identificações das minhas classes com as classes do próprio framework .net, das classes de bibliotecas externas e de plugins.

Para este exemplo, minha classe chamará “cException“, mas poderia ser “myException” ou “minhasExcessões“… vc coloca o nome que achar mais semântico para sua aplicação e equipe.

folder_app_code_exception
Meu arquivo ficou assim:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

namespace classe.util
{

/// <summary>
/// Classe para tratamento de exceções (erros) personalizadas.
/// </summary>

public class cException : Exception
{
#region Fields
private string _exceptionmessage;
#endregion

#region Properties
public string ExceptionMessage
{
get { return _exceptionmessage; }
set { _exceptionmessage = value; }
}
#endregion

#region Constructor
/// <summary>
/// Construtor da classe, este popula a field _exceptionmessage, usado para armazenar a mensagem original da exception.
/// </summary>
/// <param name=”excep”>Objeto Exception</param>

public cException(Exception excep)
{
ExceptionMessage = excep.Message;
}

/// <summary>
/// Construtor da classe, este popula a field _exceptionmessage, usado para armazenar a mensagem da exception.
/// Use msgDefinida(int) para melhor manutenção desta classe.
/// </summary>
/// <param name=”excepmsg”>String de exceção especifica</param>

public cException(string excepmsg)
{
ExceptionMessage = excepmsg;
}

#endregion

#region Methods

/// <summary>
/// Método que retorna mensagens de procedimentos inválidos (cath)
/// </summary>
/// <param name=”tipomsg”>
/// Código controle do tipo de mensagem que será retornada, especifico da exceção.
/// 1 – Dados inválidos, verifique a quantidade de caracteres digitados.
/// 2 – Usuário não autenticado.
/// 3 – Erro ao conectar com banco de dados.
/// 4 – Dados inválidos.
/// 5 – Erro de banco. Operação não foi concluída.
/// 6 – Erro: i não é maior que j (Mensagem teste)
/// </param>
/// <returns>String com mensagem</returns>

public static string MsgDefinida(int tipomsg)
{
string msg = “Operação invalida. Tente novamente!“;

switch (tipomsg)
{
case 1:
msg = “Erro: Dados inválidos, verifique a quantidade de caracteres digitados.“;
break;
case 2:
msg = “Erro: Usuário não autenticado.”;
break;
case 3:
msg = “Erro DB: Não conectou com banco de dados.”; ///usada em: cMensagem
break;
case 4:
msg = “Erro: Dados inválidos.“; ///usada em: cMensagem
break;
case 5:
msg = “Erro DB: Operação não foi concluída.“; ///usada em: cMensagem
break;
case 6:
msg = “Erro: i não é maior que j (Mensagem teste).”; ///usada em: Default.aspx.cs
break;

default:
break;
}

return msg;
}


#endregion

}

}

Explicando alguns pontos interessantes:

  1. namespace classe.util. Eu uso sempre namespace para melhor organização do meu sistema.
  2. public class cException : Exception. Minha classe herda a classe Exception .net que já possui varias propriedades interessantes. (Mais abaixo vou explicar algumas)
  3. /// <summary>. Tente sempre comentar seus códigos usando atributos prefixados para documentação xml do .net. Use também comentários in-line (aqueles informativos usando “///aqui um comentário”).
  4. public static string MsgDefinida(int tipomsg). Já predefini algumas mensagens mais usadas pelo meu sistema.

Algumas propriedades publicas da classe Exception .net:

  • HelpLink Read-write

Gets or sets a link to the help file associated with this exception.
Obtém ou define um link para o arquivo de Ajuda associado com esta exceção.

  • InnerException     Read-only

Gets the Exception instance that caused the current exception.
Obtém a instância Exception que causou a exceção atual.

  • Message     Read-only

Gets a message that describes the current exception.
Recebe uma mensagem que descreve a exceção atual.

  • Source     Read-write

Gets or sets the name of the application or the object that causes the error.
Obtém ou define o nome do aplicativo ou o objeto que causa o erro.

  • StackTrace     Read-only

Gets a string representation of the frames on the call stack at the time the current exception was thrown.
Obtém uma representação de seqüência dos quadros na pilha de chamada no momento atual a exceção foi acionada.

  • TargetSite     Read-only

Gets the method that throws the current exception.
Obtém o método que gera a exceção atual.

Fonte: http://www1.cs.columbia.edu/~lok/csharp/refdocs/System/types/Exception.html


Usando minha própria classe exception:

using System;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Collections;
using classe.util;

public partial class _Default : System.Web.UI.Page
{


protected void Page_Load(object sender, EventArgs e)
{

int i = 0;
int j = 10;
int x;

///1º) Primeiro tipo de uso, especificando o texto da minha própria exception.
try
{
if (i > j)
{
///aqui fazer qualquer coisa.
Response.Write(“<br />i é maior que j“);
///estou usando response.write pq estou na camada de apresentação. e para ficar mais fácil o entendimento.
}
else
{
throw new cException(“erro: i não é maior que j.“);
}
}
catch (cException myexcep)
{
Response.Write(“<br />1ª exception(texto escrito). Ocorreu uma exception: “);
Response.Write(myexcep.ExceptionMessage);
}


///2º) Segundo tipo de uso, especificando um texto predefinido da minha própria exception.
try
{
if (i > j)
{
///aqui fazer qualquer coisa.
Response.Write(“<br />i é maior que j“);
///estou usando response.write pq estou na camada de apresentação. e para ficar mais facil o entendimento.
}
else
{
throw new cException(cException.MsgDefinida(6));
}
}
catch (cException myexcep)
{
Response.Write(“<br />2ª exception(texto dinâmico). Ocorreu uma exception: “);
Response.Write(myexcep.ExceptionMessage);
}


///3º) Terceiro tipo de uso, usando texto(message) da própria classe exception do framework .net.
try
{

try
{
x = j / i;  ///DivideByZeroException
}
catch (Exception myexcepsub)
{
throw new cException(myexcepsub);
}

}
catch (cException myexcep)
{

Response.Write(“<br />3ª exception(Framework). Ocorreu uma exception: “);
Response.Write(myexcep.ExceptionMessage);

}


}


}

* Me desculpem pela endentação, mas não consegui ainda colocar codigos endentados igual do Visual Studio. hehe

Explicando alguns pontos interessantes:
1. Este teste foi feito no arquivo Default.aspx
2. using classe.util; Não esqueça de “chamar” o uso da classe pelo namespace, assim vc “inclui/include” a sua classe nesta pagina para ser usada.
3. 1º) Primeiro tipo de uso, especificando o texto da minha própria exception.
4. 2º) Segundo tipo de uso, especificando um texto predefinido da minha própria exception.
5. 3º) Terceiro tipo de uso, usando texto(message) da própria classe exception do framework .net.

Amigos usem e abusem desta classe.

Qualquer dúvida deixe seu comentário que eu respondo. Humm… e se tiver sugestão de algum tema para artigo também é só mandar seu comentário.

Abraços…. e até o próximo artigo.

3 comentários sobre “Criando sua própria classe exception (encapsulamento) em asp.net c#

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s