21 nov 2010

Gestión de Excepciones - Parte II

  • No manejar errores atrapando excepciones no específicas, como aquellas que heredan de System.Exception. El siguiente es un mal uso:

public class MalManejoExcepciones
{
public void DoWork(){//Hacer algo que dispare una excepción}
}

public void MethodWithBadHandler()
{
try
{
DoWork();
}
catch (Exception e)
{
//Atrapar la excepción y continuar ejecutando
}
}

  • Hay ocasiones en las que no se deben atrapar las excepciones y dejar que la aplicación "explote" y termine.
  • Atrapar las excepciones que sabemos que debemos hacer en cada caso. No atrapar excepciones no específicas y re lanzarlas.
  • Atrapar las excepciones que sabemos que podemos continuar con la ejecución de nuestra aplicación. Por ejemplo: si recibimos una excepción del tipo "FileNotFoundException", se puede atrapar y permitirle al usuario que especifique un archivo diferente. En cambio si se recibe un error desconocido y no sabemos si es seguro que la aplicación en ese estado continúe no se debe atrapar la excepción.
  • Usar el bloque try-finally preferentemente al try-catch. El bloque catch permite atrapar excepciones, mientras que el finally liberar recursos.
  • Disparar únicamente utilizando la palabra "throw", de esta manera preservamos el call stack trace. Ejemplo:


public void DoWork(Object anObject)
{
// Do some work that might throw exceptions.
if (anObject == null)
{
throw new ArgumentNullException("anObject","Specify a non-null argument.");
}
// Do work with o.
}

public void MethodWithBadCatch(Object anObject)
{
try
{
DoWork(anObject);
}
catch(ArgumentNullException e)
{
System.Diagnostics.Debug.Write(e.Message);
// Incorrecto
throw e;
// Debería ser:
// throw;
}
}

No hay comentarios:

Publicar un comentario