2010-11-18 12 views
5

Me he encontrado haciendo demasiado manejo de errores con try \ catch y obtengo un código feo con eso. Ustedes tienen alguna técnica o marco para hacer esto más elegante? (En C# windows forms o asp.net).¿Existe alguna forma más elegante de manejar errores que distribuir try/catch en todo el código de la aplicación?

+0

¿Se puede publicar una muestra de código con detalles?Necesitamos saber qué problema está tratando de resolver, y simplemente decir que algo es "poco elegante" no es suficiente descripción de un problema. – Oded

+0

Me encontré con el mismo problema en una aplicación en la que estaba trabajando, no investigué otros medios, simplemente puse un montón de capturas de prueba ..... pero me imagino que puede hacer una captura de prueba y todas las rutas de subrutinas llamantes de nuevo, creo ... así que si tienes un montón de llamadas de función no tienes que ponerlas en cada función, pero solo en el alto nivel – onaclov2000

+1

Bastante vago ... un ejemplo sería beneficioso ... entonces alguien puede proporcionar alguna idea –

Respuesta

6

Debe leer sobre el manejo estructurado de excepciones. Si está usando tantos manejadores de excepción como suena, entonces lo está haciendo mal.

El manejo de excepciones no es como comprobar los valores devueltos. Se supone que debes manejar algunas excepciones en puntos clave y limitados de tu código, no por todos lados. Recuerde que las excepciones "burbujean" la pila de llamadas.

Aquí hay un artículo de good and well-reviewed CodeProjec sobre excepciones a las mejores prácticas.

1

Tierra de Java tenía bastante el mismo problema. Simplemente observa el método y no puede entender a primera vista lo que está haciendo, porque todo lo que ve es try/catch blocks. Tome un método de línea de 30-40 y deseche todas las declaraciones try y catch blocks y podría terminar con 5-6 líneas de lógica de aplicación pura. Este no es un problema tan grande con C# ya que tiene excepciones no verificadas, pero se vuelve realmente feo en el código de Java. Lo curioso es que los bloques try/catch tenían la intención de resolver el mismo problema en primer lugar. En aquel entonces, fue causada por la locura errno/errstr.

Lo que suelen hacer los chicos de Java se basa en cómo manejas típicamente la excepción. La mayoría de las veces no puedes hacer nada para corregir el problema. Simplemente notifica al usuario que lo que estaba tratando de hacer no funcionó, devuelve la aplicación en cierto estado y tal vez log y excepción con stacktrace completo para registrar el archivo.

Dado que maneja todas las excepciones como esta, la solución es tener un manejador de excepciones catch-all, que se asienta sobre la pila de aplicaciones y captura todas las excepciones que se lanzan y propagan a la pila. Con ASP.NET se usa algo como esto:

http://www.developer.com/net/asp/article.php/961301/Global-Exception-Handling-with-ASPNET.htm

Al mismo tiempo, usted es libre para anular ese manejador mundial mediante la colocación de bloques try/catch en su código, donde se siente algo se puede hacer, para corregir el problema

0

Esta gran confianza en el manejo de excepciones (en cualquier idioma) sugiere que el mecanismo está siendo mal utilizado. Siempre entendí que el manejo de excepciones fue diseñado para atrapar el evento verdaderamente excepcional e imprevisible. No está diseñado para manejar (por ejemplo) la entrada de datos no válidos por parte de un usuario; esta es una operación normal y su codificación de diseño y aplicación debe lidiar con dicho procesamiento normal.

Cuestiones relacionadas