El manejo de excepciones es difícil en cualquier aplicación. Debe pensar en todas y cada una de las excepciones y entrar rápidamente en un patrón que funcione para usted. Trato de grupo de excepciones en una de las siguientes categorías ...
- excepciones que sólo debería ocurrir si su código es incorrecto (o usted no entiende, o que no tienen control sobre ellos):
Ejemplo: Tal vez su framework de persistencia se requiere para atrapar excepciones de SQL que podrían derivarse de SQL mal formado, sin embargo, usted está ejecutando una consulta duro codificado.
Manejo: En mi experiencia la mayoría de las excepciones caen en esta categoría. Por lo menos, inicie sesión. Mejor aún, envíelos a un servicio de manejo de excepciones que los registra. Luego, en el futuro, si decide que desea registrarlos de manera diferente o hacer algo diferente con ellos, puede cambiarlo en un solo lugar. Tal vez también quiera enviar una bandera hasta la capa de la interfaz de usuario diciendo que se produjo algún tipo de error y que deberían volver a intentar su operación. Tal vez envíes un administrador por correo.
También deberá devolver algo a las capas superiores para que la vida en el servidor continúe. Tal vez este es un valor predeterminado, o tal vez esto es nulo. Tal vez tienes alguna manera de cancelar toda la operación.
Otra opción es dar al servicio de manejo de excepciones dos métodos de manejo. Un método handleUnexpectedException()
notificaría al usuario pero no volvería a lanzar una excepción, y podría devolver un valor predeterminado si tiene la capacidad de desenrollar la pila usted mismo o continuar de alguna manera. Un método handleFatalException()
notificaría al usuario y volvería a generar algún tipo de excepción para que pueda dejar que la excepción arroje la pila por usted.
- excepciones que realmente son causadas por el usuario:
Ejemplo: El usuario está intentando actualizar un widget foobar y darle un nuevo nombre, pero un widget foobar ya existe con el nombre que quieren.
Manejo: En este caso debe devolver la excepción al usuario. En este caso, puede continuar lanzando la excepción (o mejor, ni siquiera atraparla) hasta que llegue a la capa UI y luego la capa UI debería saber cómo manejar la excepción. Asegúrese de documentar estas excepciones para que usted (o quien esté escribiendo su UI) sepa que existen y sabe esperarlas.
- excepciones de que en realidad se puede manejar:
Ejemplo: realiza una llamada de servicio remoto y los tiempos de servicio remoto fuera, pero que saben que tienen un historial de hacerlo y usted debe solo rehace la llamada.
Manejo: A veces estas excepciones comienzan en la primera categoría. Después de que su aplicación haya estado en libertad por un tiempo, se da cuenta de que realmente tiene una buena forma de manejarla.A veces, como con excepciones de bloqueo optimista o excepciones interrumpidas, capturar la excepción y hacer algo con ella es solo una parte del negocio. En estos casos, maneje la excepción. Si su lenguaje (estoy pensando en Java) distingue entre las excepciones marcadas y las no marcadas, recomendaría que estas siempre sean excepciones marcadas.
Para abordar su pregunta anterior, delegaría la excepción inicial a un servicio que notificaría al usuario y dependiendo de qué tipo de objeto es MyObj (por ejemplo, configuraciones) podría dejar que esto sea una excepción no fatal y devolver un valor predeterminado valor o si no puedo hacer eso (por ejemplo, cuenta de usuario) entonces podría dejar que esto sea una excepción fatal, así que no tengo que preocuparme por ello.
no hay una respuesta aceptada? :/ – Vbp