Sto lottando con una domanda molto semplice:
Ora sto lavorando su un'applicazione server e ho bisogno di inventare una gerarchia per le eccezioni (alcune eccezioni esistono già, ma è necessario un framework generale). Come posso iniziare a farlo?
Sto pensando di seguire questa strategia:
1) Cosa non va?
- Viene chiesto qualcosa, che non è consentito.
- Viene richiesto qualcosa, è consentito, ma non funziona a causa di parametri errati.
- Viene chiesto qualcosa, è consentito, ma non funziona a causa di errori interni.
2) Chi avvia la richiesta?
- L'applicazione client
- Un'altra applicazione server
3) Gestione dei messaggi: poiché abbiamo a che fare con un'applicazione server, si tratta solo di ricevere e inviare messaggi. Quindi cosa succede se l'invio di un messaggio va storto?
Pertanto, potremmo ottenere i seguenti tipi di eccezione:
- ServerNotAllowedException
- ClientNotAllowedException
- ServerParameterException
- ClientParameterException
- InternalException (nel caso in cui il server non sappia da dove provenga la richiesta)
- ServerInternalException
- ClientInternalException
- MessageHandlingException
Questo è un approccio molto generale per definire la gerarchia delle eccezioni, ma temo che mi manchino alcuni casi ovvi. Hai idee su quali aree non sto trattando, sei a conoscenza di eventuali svantaggi di questo metodo o esiste un approccio più generale a questo tipo di domanda (in quest'ultimo caso, dove posso trovarlo)?
Grazie in anticipo
catch
blocchi che utilizzo, non ho molto più utilizzo per l'eccezione rispetto al messaggio di errore che contiene. In realtà non ho nulla di diverso che posso fare per un'eccezione legata alla mancata lettura di un file poiché non riesco ad allocare memoria durante il processo di lettura, quindi tendo a catturare std::exception
e segnalare il messaggio di errore che contiene, forse decorando prima con "Failed to open file: %s", ex.what()
uno stack buffer prima di stamparlo.
catch
blocchi diversi in un singolo sito di recupero, ma spesso è solo per ignorare il messaggio all'interno dell'eccezione e stampare un messaggio più localizzato ...