Estoy atascado decidiendo cómo manejar las excepciones en mi aplicación.
Mucho si mis problemas con las excepciones provienen de 1) acceder a los datos a través de un servicio remoto o 2) deserializar un objeto JSON. Desafortunadamente, no puedo garantizar el éxito de ninguna de estas tareas (cortar la conexión de red, objeto JSON mal formado que está fuera de mi control).
Como resultado, si encuentro una excepción, simplemente la atrapo dentro de la función y devuelvo FALSE a la persona que llama. Mi lógica es que todo lo que realmente le importa a la persona que llama es si la tarea fue exitosa, no por qué no fue exitosa.
Aquí hay un código de muestra (en JAVA) de un método típico)
public boolean doSomething(Object p_somthingToDoOn)
{
boolean result = false;
try{
// if dirty object then clean
doactualStuffOnObject(p_jsonObject);
//assume success (no exception thrown)
result = true;
}
catch(Exception Ex)
{
//don't care about exceptions
Ex.printStackTrace();
}
return result;
}
Creo que este enfoque está bien, pero tengo mucha curiosidad por saber cuáles son las mejores prácticas para administrar excepciones (¿debería realmente hacer burbujear una excepción en una pila de llamadas?).
En resumen de preguntas clave:
- ¿Está bien simplemente detectar las excepciones pero no hacerlas burbujear o notificar formalmente al sistema (ya sea a través de un registro o una notificación al usuario)?
- ¿Qué mejores prácticas existen para las excepciones que no dan como resultado que todo requiera un bloque try / catch?
Seguimiento / Editar
Gracias por todos los comentarios, encontré algunas fuentes excelentes sobre la gestión de excepciones en línea:
- Mejores prácticas para el manejo de excepciones | O'Reilly Media
- Prácticas recomendadas para el manejo de excepciones en .NET
- Mejores prácticas: gestión de excepciones (el artículo ahora apunta a la copia de archive.org)
- Antipatrones de manejo de excepciones
Parece que la gestión de excepciones es una de esas cosas que varían según el contexto. Pero lo más importante es que uno debe ser coherente en la forma en que administran las excepciones dentro de un sistema.
Además, tenga cuidado con la descomposición del código a través de intentos / capturas excesivos o no otorgando una excepción a su respeto (una excepción es una advertencia al sistema, ¿qué más se debe advertir?).
Además, este es un bonito comentario de elección de m3rLinEz .
Tiendo a estar de acuerdo con Anders Hejlsberg y usted en que a la mayoría de las personas que llaman solo les importa si la operación es exitosa o no.
A partir de este comentario, surgen algunas preguntas en las que pensar cuando se trata de excepciones:
- ¿Cuál es el punto de lanzar esta excepción?
- ¿Cómo tiene sentido manejarlo?
- ¿A la persona que llama realmente le importa la excepción o simplemente le importa si la llamada fue exitosa?
- ¿Es correcto forzar a una persona que llama a administrar una posible excepción?
- ¿Estás siendo respetuoso con los ídolos del idioma?
- ¿Realmente necesitas devolver un indicador de éxito como booleano? Devolver booleano (o un int) es más una mentalidad de C que una de Java (en Java, solo manejaría la excepción).
- Siga las construcciones de gestión de errores asociadas con el idioma :)!