El manejo de excepciones y errores al momento de crear una aplicación quizá puede ser considerado como de “poca importancia”. Pero para una aplicación en modo productivo, el considerarlos es de vital importancia para poder preservar el flujo de vida de una aplicación evitando que se cierre de manera inesperada o peor aún, alterando el funcionamiento correcto de la máquina en donde fue abierta. Así que vamos con estas prácticas.
Nunca hagas una excepción de catch y no hagas nada dentro de ella. Si escondes la excepción, nunca sabrás si la excepción sucedió o no. Muchos programadores utilizan este método para ignorar métodos sin significancia. Deberías tratar siempre de evitar la excepciones al atrapar todos los escenarios de un error programáticamente. En cualquier caso, atrapar una excepción y no hacer nada no esta permitido. En el peor de los casos, registra la falla y continúa.
En el caso de las excepciones, muéstrale a tu usuario un mensaje amigable, pero registra el verdadero error con todos los posibles detalles acerca del error, incluyendo el momento en que ocurrió, método y tipo de clase.
Siempre atrapa solo las excepciones específicas, no las genéricas.
void LeerDesdeXML ( string rutaArchivo ) { try { // leer datos XML. } catch (FileIOException ex) { // registrar error. // excepción "reenviada" dependiendo del caso. throw; } } |
No hay necesidad de atrapar excepciones en todos tus métodos. Déjalos abiertos y permite se caiga. Esto ayudará a que tu encuentres la mayoría de los errores ocurridos durante el ciclo de desarrollo. Puedes tener un manejador de errores a nivel de aplicación (nivel de hilos) donde puedes manejar todas las excepciones generales. En caso de un “error inesperado general”. Este manejador de errores debería poder atrapar la excepción y debería registrar el error además de darle al usuario un mensaje amigable antes de cerrar la aplicación, o en otro caso al menos permitir al usuario “ignorar y continuar”.
Cuando te vuelva a salir una excepción, usa la sentencia throw sin especificar la excepción original. De esta manera la pila de operaciones se preserva.
catch { // escribe lo que quieras para manejar la excepción throw; } |
No abuses de las sentencias try-catch. Utilízalas únicamente donde creas que puede ocurrir una excepción.
Cuando te comuniques con sistemas externos como por red o cualquier tipo de hardware, debes colocar de forma obligada un manejador de excepciones, si cualquier medio de comunicación falla, tu aplicación deberá poder reaccionar de acuerdo a ello sin llegar a colapsar.
Las sentencias try-catch son solo para excepciones, no escribas demasiado código en ellas. De ser necesario, escribe diferentes sentencias para cada actividad que realices. Esto te ayudará a encontrar cual es la pieza de código que genera el error y podrás dar tantos mensajes específicos como sea necesario.
Escribe tus propias clases de código para excepciones si tu aplicación lo necesita. No te vayas por las excepciones clásicas de la clase SystemException. En su lugar hereda de ApplicationException.