Desde que Microsoft presentó los bloques de aplicaciones, me he topado con gente que usa el Exception Handling Application Block. Recientemente, he tenido una mirada más cercana y resumiría la funcionalidad básica de la siguiente manera (omita el siguiente bloque si ya sabe lo que hace):Bloque de manejo de excepciones de Microsoft: ¿no es un ejemplo perfecto para la sobreingeniería?
El bloque de aplicación de manejo de excepciones tiene como objetivo centralizar y hacer completamente configurable con los archivos de configuración de la siguiente key exception handling tasks:
- registro una excepción
- Sustitución de una excepción
- Envolviendo una excepción
- Propa gating una excepción
- etc.
La biblioteca hace que al tener que modificar sus bloques intento de captura de la siguiente manera:
try { // Run code. } catch(DataAccessException ex) { bool rethrow = ExceptionPolicy.HandleException(ex, "Data Access Policy"); if (rethrow) { throw; } }
Sobre la base de lo que se especifica en el app.config para el nombre de la directiva (see here for docs), o bien HandleException ...
- lanzar una nueva excepción (reemplazar la excepción original)
- envuelve la excepción original en una nueva y tira que
- traga la excepción (es decir no hacer nada)
- tienen que volver a lanzar la excepción original
Además también se puede configurar para hacer más cosas de antemano (por ejemplo, registrar la excepción).
Ahora aquí está mi problema: completamente no veo cómo puede ser beneficioso hacer que sea configurable si una excepción se reemplaza, envuelve, se traga o se vuelve a tirar. En mi experiencia, esta decisión debe tomarse en el momento de escribir el código porque, por lo general, tendrá que cambiar el código circundante o de llamada cuando cambie el comportamiento de manejo de excepciones.
Por ejemplo, es probable que su código comience a comportarse incorrectamente cuando se reconfigura de modo que una excepción particular lanzada en un punto particular se trague en vez de volver a lanzar (puede haber código después del bloque catch que no se debe ejecutar cuando se produce una excepción). Lo mismo ocurre con todos los demás cambios posibles en el manejo de excepciones (por ejemplo, reemplazar -> volver a tirar, tragar -> envolver).
Por lo tanto, para mí, la conclusión es que el bloque de manejo de excepciones resuelve problemas que realmente no existen en la práctica. El registro de excepción y el bit de notificación están bien, pero ¿no es todo lo demás simplemente un ejemplo perfecto para la sobreingeniería?
Buena pregunta. +1. También se agregaron argumentos para "excepción eliminar ubicación" en http://stackoverflow.com/questions/438073#438230. ¿Podrías echarle un vistazo? – VonC