2011-02-03 27 views
5

Me preguntaba cuál sería la mejor forma de manejar errores en una aplicación en lenguajes de programación como C++, Java, C#.Best practice Error handling

Pensé en crear un lugar donde almacenar el número relacionado con los mensajes de error y advertencia.

Por ejemplo:

10000 -> "No se puede leer el archivo". ... 20000 -> "Desbordamiento de búfer". ... 80000 -> "Cosas críticas".

Creo que es una buena práctica mapear los errores con números. Es más fácil encontrar el error sin importar con qué idiomas se muestre. Qué piensan acerca de eso, chicos ? ¿Hay una forma aún mejor de hacer eso?

Otro punto es, ¿cómo almacenarlos, cómo crearlos?

¿Es una gran enumeración general una buena solución? ¿Tenemos que almacenarlos en una base de datos? En un archivo?

Debería ser:

  • Fácil de encontrar un error en el código (es decir, desde el número.).
  • Fácil de agregar un nuevo error (no usar el mismo número de error dos veces puede ser complicado si no están en el mismo lugar).

¿Qué piensan sobre todo eso?

Gracias de antemano por su ayuda y consejos!

Respuesta

6

El uso de códigos de error para identificar excepciones no es una mala práctica.

Puede ser muy útil en un entorno de producción para mantener los archivos de registro más cortos y también se puede utilizar para internacionalizar los mensajes de error.

Por otro lado, al desarrollar, puede ser molesto recibir un código de error en lugar de un mensaje de error completo con una descripción significativa. Un desarrollador tiene que ir y verificar de qué se trata el código de error.

En uno de mis proyectos (con Java) he desarrollado un enfoque híbrido. Mi excepción de raíz tiene un constructor que usa una clase Enum. La clase Enum contiene una lista de códigos de error + mensajes de error predeterminados. Algo así como:

public enum ErrorCodes { 

    VALIDATION_ERROR(5001, "One of the objects cannot be validated"), 
    RESOURCE_NOT_FOUND(4004, "The requested resource does not exist"), 

La excepción raíz tiene también otros constructores, por lo que un desarrollador puede anular el mensaje predeterminado:

public CoreException(ErrorCodes _errorCode, final String message, final Throwable cause) { 
    super(message, cause); 
    errorCode = _errorCode.getCode(); 
} 


public CoreException(ErrorCodes _errorCode, final String message) { 
    super(message); 
    errorCode = _errorCode.getCode(); 
} 

Cuando se detecta la excepción del gestor de excepciones puede decidir (sobre la base de una cierta configuración configuración) para registrar el error y el mensaje o el error solamente. Un controlador de error más sofisticado también podría buscar un mensaje en un idioma específico de un paquete de recursos basado en el código de error.

+0

Sí, es exactamente lo que estaba buscando. No quiero mostrar solo un número, sería tan doloroso encontrar el error relacionado. Pero quiero mostrar tanto un número como un texto comprensible para el usuario. De esta forma, si en algún momento obtenemos una captura de pantalla con un texto en un idioma extranjero, ¡aún tenemos el número para que coincida con el error! Estamos pensando en un número y un texto predeterminado, como usted. Se implementa de otra manera, ¡pero la idea sigue siendo la misma! ¡Gracias por tu respuesta! –

0

No lo hagas.

Tenemos mejores herramientas que C y FORTRAN.

Lanza excepciones y da los nombres. C# y Java darán call stacks.

C++ puede decirle el tipo de la excepción (apenas)

+2

¿Qué tal el control de producción? Los códigos de error son importantes cuando se implementa una aplicación grande con múltiples componentes. Un entorno de producción normal supervisa los registros para encontrar cadenas específicas (códigos de error, la mayoría de las veces) y actúa sobre ellas. Además, ¿realmente desea terminar con cientos de clases de excepción? –