2011-02-03 23 views
5

Mi chiedevo quale sarebbe il modo migliore per gestire gli errori in un'applicazione in linguaggi di programmazione come C++, Java, C#.Best practice Gestione degli errori

Ho pensato di creare un luogo in cui memorizzare il numero relativo ai messaggi di errore e di avviso.

Ad esempio:

10000 -> "Impossibile leggere il file". ... 20000 -> "Buffer overflow". ... 80000 -> "Elementi critici".

Penso che sia una buona pratica mappare gli errori con i numeri. È più facile trovare l'errore indipendentemente dalle lingue con cui viene visualizzato. Cosa ne pensate voi ragazzi di questo? C'è un modo ancora migliore per farlo?

Un altro punto è, come memorizzarli, come crearli?

È un grande enum generale una buona soluzione? Dobbiamo archiviarli in un database? In un file?

Dovrebbe essere:

  • facile trovare un errore nel codice (cioè dal numero.).
  • Facile aggiungere un nuovo errore (non utilizzare lo stesso numero di errore due volte può essere complicato se non ci si trova nello stesso posto).

Cosa ne pensate di tutto questo?

Grazie in anticipo per il vostro aiuto e consigli!

risposta

6

L'utilizzo di codici di errore per identificare le eccezioni non è una cattiva pratica.

Può essere molto utile in un ambiente di produzione per mantenere i file di registro più brevi e può anche essere utilizzato per internazionalizzare i messaggi di errore.

D'altra parte, durante lo sviluppo, può essere fastidioso ricevere un codice di errore anziché un messaggio di errore completo con una descrizione significativa. Uno sviluppatore deve andare a controllare di che cosa si tratta il codice di errore.

In uno dei miei progetti (utilizzando Java) ho sviluppato un approccio ibrido. La mia eccezione root ha un costruttore che usa una classe Enum. La classe Enum contiene un elenco di codici di errore + messaggi di errore predefiniti. Qualcosa di simile:

public enum ErrorCodes { 

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

L'eccezione radice ha anche altri costruttori, in modo che uno sviluppatore può ignorare il messaggio predefinito:

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(); 
} 

Quando l'eccezione e 'colto il gestore di eccezioni può decidere (sulla base di alcune configurazioni impostazione) per registrare l'errore e il messaggio o solo l'errore. Un gestore di errori più sofisticato potrebbe anche cercare un messaggio in una lingua specifica da un gruppo di risorse basato sul codice di errore.

+0

Sì, è esattamente quello che stavo cercando. Non voglio visualizzare solo un numero, sarebbe un tale dolore trovare l'errore correlato. Ma voglio mostrare sia il numero sia un testo comprensibile per l'utente. In questo modo, se a un certo punto, otteniamo uno screenshot con un testo in una lingua straniera, abbiamo ancora il numero corrispondente all'errore! In realtà stiamo pensando a un numero e un testo predefinito, come te. È implementato in un altro modo, ma l'idea rimane la stessa! Grazie per la tua risposta! –

0

Non farlo.

Abbiamo strumenti migliori di C e FORTRAN.

Lancia eccezioni e indica i nomi. C# e Java daranno stack di chiamate.

C++ può dirvi il tipo di eccezione (appena a malapena)

+2

E il monitoraggio della produzione? I codici di errore sono importanti quando si distribuisce un'applicazione di grandi dimensioni con più componenti. Un normale ambiente di produzione controlla i log per trovare stringhe specifiche (codici di errore, la maggior parte del tempo) e agire su quelli. Inoltre, vuoi davvero finire con centinaia di classi di eccezioni? –

Problemi correlati