Pregunta

Necesito estandarizar la forma en que clasifico y manejo los errores / excepciones "con gracia".

Actualmente utilizo un proceso mediante el cual informo los errores a una función que pasa un número de error, código de gravedad, información de ubicación y cadena de información adicional. Esta función devuelve verdadero booleano si el error es fatal y la aplicación debería morir, falso de lo contrario Como parte de su proceso, además de la retroalimentación visual para el usuario, la función también registra los errores de registro a archivo por encima de cierto nivel de gravedad.

Número de error indexa una serie de cadenas que explican el tipo de error, por ejemplo: 'Acceso a archivos', 'Entrada de usuario', 'Creación de subprocesos', 'Acceso a la red', etc. El código de gravedad es binario O de 0 , 1,2 o 4, 0 = informativo, 1 = user_retry, 2 = must_complete, 4 = must_continue. La información de ubicación es módulo & amp; función, y la información adicional es parámetros y valores de variables locales.

Quiero convertir esto en una forma estándar de manejo de errores que puedo colocar en una biblioteca y reutilizar en todas mis aplicaciones. Principalmente utilizo C / C ++ en Linux, pero me gustaría usar la biblioteca resultante también con otros lenguajes / plataformas.

  • Una idea es extender el tipo de error matriz para indicar algún defecto comportamiento para un nivel de severidad dado, pero si esto se convierte en el Acción tomada y no dar opciones a ¿el usuario?

  • O: si dicha extensión es una sub-matriz de opciones que el usuario necesidad de elegir? El problema con esto es que las opciones serían de necesidad de ser generalizado opciones relacionadas con la programación que pueden muy bien completamente desconcertar una usuario final.

  • O: debe cada aplicación que use el error-lib rutina pasar a lo largo de su propia matriz de errores o por defecto comportamientos - pero esto va a derrotar a la propósito de la biblioteca ...

  • O: si los niveles de gravedad son manejado en cada aplicación?

O: ¿qué sugieres? ¿Cómo manejas los errores? ¿Cómo puedo mejorar esto?

¿Fue útil?

Solución

La forma en que maneja los errores realmente depende de la aplicación. Una aplicación web tiene un mecanismo de captura de errores diferente al de una aplicación de escritorio, y ambas difieren drásticamente de un sistema de mensajería asíncrono.

Dicho esto, una práctica común en el manejo de errores es manejarlo en el nivel más bajo posible donde se pueda tratar. Esto generalmente significa la capa de aplicación o la GUI.

Me gustan los niveles de severidad. Tal vez pueda tener una biblioteca de recolección de errores conectable con diferentes proveedores de salida de error y un proveedor de nivel de gravedad.

Los proveedores de salida podrían incluir cosas como un logginProvider y IgnoreErrorsProvider. Los proveedores de severidad probablemente serían algo implementado por cada proyecto, ya que los niveles de severidad generalmente están determinados por el tipo de proyecto en el que ocurre. (Por ejemplo, los problemas de conexión de red son más graves para una aplicación bancaria que para un sistema de gestión de contactos).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top