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?
Respuesta
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.
Solo agregue un Try Catch no resuelve el problema. Este tema es demasiado grande para manejarlo como una sola pregunta. Necesitas leer un poco.
http://msdn.microsoft.com/en-us/library/8ey5ey87%28VS.71%29.aspx
http://www.codeproject.com/KB/architecture/exceptionbestpractices.aspx
también FXCop y Team System VS le advierte sobre algunas cuestiones de diseño.
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
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.
http://msdn.microsoft.com/en-us/library/ff664698(v=PandP.50).aspx
Salida excepción de Microsoft Manejo bloque de aplicación. Tiene una curva de aprendizaje inicial, pero es una buena cosa una vez que lo resuelves.
- 1. Rieles: ¿alguna forma elegante de manejar 404?
- 2. ¿Existe alguna forma más elegante de convertir un documento XML en una cadena en Java que este código?
- 3. Manejo de errores más elegante en la biblioteca C++ - jsoncpp
- 4. ¿Existe alguna forma mejor de manejar una excepción de conversión?
- 5. ¿Existe alguna forma más elegante de calcular x = (y/n) + (y% n? 1: 0)?
- 6. ¿Existe alguna forma más elegante de agregar un elemento a un Diccionario <> de forma segura?
- 7. ¿Cuál es la forma más elegante de manejar los dominios personalizados de los usuarios?
- 8. ¿Existe una forma más elegante de combinar observables cuando el tipo de devolución no es importante?
- 9. ¿Existe alguna forma de validar el código jQuery?
- 10. ¿Cuál es la forma más elegante de usar procedimientos almacenados?
- 11. Buscando el código más elegante despachador
- 12. ¿Existe alguna manera elegante de actualizar jQuery lentamente?
- 13. ¿Existe una biblioteca de consola más elegante para C#?
- 14. Rieles: ¿Manera elegante de manejar la navegación?
- 15. ¿Existe alguna manera de manejar excepciones en Python?
- 16. ¿Hay alguna forma en Grails de obtener todo el registro?
- 17. Errores de aplicación de análisis de código que suprime
- 18. ¿Hay alguna manera más elegante de agregar entradas anulables?
- 19. ¿Cuál es la forma más fácil de usar el código fuente C en una aplicación Java?
- 20. ¿Existe alguna manera más elegante de convertir años de dos dígitos a años de cuatro dígitos con lubridate?
- 21. ¿Existe alguna manera simple y elegante de definir singletons?
- 22. ¿Hay alguna manera elegante de escribir este código?
- 23. ¿Existe una forma elegante de publicar mensajes en AWS SQS con un retraso de visibilidad de más de 15 minutos?
- 24. En ASP clásico, ¿hay alguna manera de manejar los errores a nivel de aplicación?
- 25. ¿Existe alguna forma preferida de formatear las cadenas jQuery para que sean más legibles?
- 26. Manejar los detectores de eventos de cambio de propiedad (muchos de ellos) de forma más elegante (¿diccionario?)
- 27. ¿Existe alguna forma más rápida de copiar un archivo que no sea File.Copy
- 28. ¿Existe alguna forma de convertir el código fuente en una CodeCompileUnit?
- 29. ¿Existe alguna forma mejor de actualizar WebView?
- 30. ¿Hay alguna forma más concisa de escribir este código Java?
¿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
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
Bastante vago ... un ejemplo sería beneficioso ... entonces alguien puede proporcionar alguna idea –