¿Debo siempre ajustar las llamadas a recursos externos en un try-catch? (es decir, llamadas a una base de datos o sistema de archivos) ¿Existe una mejor práctica para el manejo de errores al llamar recursos externos?siempre intente atrapar llamadas de recursos externos?
Respuesta
captura únicas excepciones que puede manejar. Por ejemplo, cuando se utilizan recursos externos, la mejor práctica es capturar excepciones específicas que usted sabe que puede manejar. En el caso de archivos, esto puede ser (IOException, SecurityException, etc.), en el caso de la base de datos, la excepción puede ser SqlException u otros.
En cualquier caso, no debe quedar atrapado excepciones que no manejan, dejarlas fluir a una capa superior que se pueda. O si por alguna razón detecta excepciones pero no las maneja, vuelva a lanzarlas utilizando solo throw; (que creará una operación de recuperación IL, a diferencia de trow).
En caso de usar recursos que no sabe qué tipo de excepciones pueden arrojar, se verá forzado a captar el tipo de excepción general. Y en este caso lo de las cajas fuertes sería usar dichos recursos de un dominio de aplicación diferente (si es posible), o dejar que la excepción salte al nivel superior (ex UI) donde se pueden mostrar o registrar.
Creo que la respuesta absoluta es completamente condicional (cómo control tienes sobre el entorno, cuál es el equilibrio esperado entre rendimiento y coherencia y muchos otros, estoy seguro), pero en general siempre lo hago, eligiendo la seguridad sobre el rendimiento potencialmente más lento.
siempre depende de lo que desea lograr. Un servidor que no responde puede ser lo suficientemente grave como para detener todo lo que hace la rutina, y la excepción debe ser lanzada a la persona que llama.
En otros casos, no le importa si no actualizó la base de datos o no. Entonces consumir la excepción está bien.
Obviamente, no desea mostrar el seguimiento de la pila a su usuario final, por lo que deberá buscarlo en algún lugar.
Eso es lo que encontré y que tiene sentido para mi .. comprobar manualmente si las cosas obvias, y mucho try-catch haga el resto ..
Eric Lippert tiene un buen blog sobre esto, here.
No tiene sentido (excepto para "molestar" (ver blog)) atrapar una excepción a menos que pueda hacer algo útil; y en la mayoría de los casos simplemente no puedes, así que déjalo burbujear (tu interfaz de usuario debería obviamente limpiar y mostrar algo).
Puede, sin embargo, tener un "intento/finalmente" para tratar con la gestión de recursos. O incluso más limpio, un bloque "usar" para hacer lo mismo.
creo que hay tres razones para tener un bloque catch:
- Puede manejar la excepción y recuperar (de código de "bajo nivel")
- ¿Quieres rewrap la excepción (de nuevo, desde "bajo nivel" de código)
- Estás en la parte superior de la pila, y si bien no se puede recuperar la operación en sí, no desea que toda la aplicación para bajar
Si usted se pega a estos, deberías tener muy fe w atrapar bloques en comparación con los bloques try/finally
- y esos bloques try/finally
casi siempre solo llaman a Dispose
, y por lo tanto se escriben mejor como using
declaraciones.
Conclusión: es muy importante tener un bloque finally
para liberar recursos, pero los bloques catch
suelen ser más raros.
- 1. Ventana de pila de llamadas siempre vacía
- 2. GWT: carga diferida de recursos de JS externos
- 3. ¿configura el control de caché para recursos externos?
- 4. Cómo gestiona CLR las llamadas a métodos externos en C#
- 5. ¿Deberíamos atrapar siempre una Excepción, envolverla y pasarla?
- 6. ¿Debo siempre envolver mi código en intentar ... atrapar bloques?
- 7. Cómo acceder a recursos externos desde el sitio web Aspx
- 8. Git usando subárbol o submódulo para administrar recursos externos
- 9. Agregar recursos externos al servidor GWT dev mode (Jetty)
- 10. JSF 2.0 Cómo vincular CSS desde recursos externos
- 11. El constructor de recursos de Silverlight siempre regresa al interno
- 12. Convertir recursos de IE en caché, pero siempre revalidar
- 13. Implementación de módulos externos
- 14. ¿System.currentTimeMillis siempre devolverá un valor> = llamadas anteriores?
- 15. ¿Cómo atrapar las excepciones lanzadas en las devoluciones de llamadas pasadas a jQuery?
- 16. ¿Cómo forzar a XCode 4 a actualizar siempre los recursos?
- 17. Cómo hacer svn interno: externos
- 18. mensaje de advertencia R en la expresión recursiva: si falla, intente, intente nuevamente
- 19. Programas de pruebas unitarias que en su mayoría interactúan con recursos externos
- 20. Cómo cargar recursos externos usando un URI de referencia en Java XML
- 21. AppleScript: en error (intente) número de línea
- 22. Probar/atrapar bloques dentro de los constructores
- 23. ¿Es posible atrapar errores de CORS?
- 24. Cómo atrapar el jQuery.event.trigger()?
- 25. cómo atrapar un int
- 26. Probar/atrapar en Java
- 27. ¿Cuándo atrapar excepciones?
- 28. Intentando atrapar el oncreate de un formulario
- 29. intente abrir una página cada 10 segundos
- 30. $ _COOKIE ['cookiefoo'], intente obtener una cookie