Come distinguere tra eccezioni provenienti dalla logica di sistema e di business?

3

Vorrei distinguere tra le eccezioni derivanti dalla logica aziendale come

  • il record del database richiesto non esiste
  • tenta di memorizzare dati aziendali non validi (convalida non riuscita)
  • il file CSV fornito ha un formato errato

dalle eccezioni di sistema standard come

  • timeout della connessione al database
  • errore I / O di file
  • memoria esaurita

Generico eccezioni di business logic nel mio codice come un modo rapido per abbandonare l'operazione in corso quando qualcosa va storto (invece di restituire false e altre tecniche).

Quindi implementerei una gestione diversa di questi tipi di eccezioni:

  • la mia eccezione di business logic: viene visualizzata come messaggio di errore normale ordinario
  • eccezione di sistema standard: log exception to file, all'utente vengono fornite le opzioni Abort / Ignore (/ Retry) etc ...

L'idea migliore che riuscivo a capire era creare antenato comune per le eccezioni aziendali e controllarlo nel gestore. Penso che questo fosse lo scopo originale di ApplicationException che ora è deprecato. Pensi che io possa resuscitarlo per lo scopo o c'è un approccio migliore?

    
posta miroxlav 07.01.2015 - 14:36
fonte

1 risposta

5

Se ti aspetti che alcune eccezioni vengano gestite al livello più alto del programma (o vicino ad esso), crea una classe di eccezioni specifica per loro in modo da poterle identificare. In questo modo non rilevi accidentalmente eccezioni derivanti da bug del programma o errori irreversibili (ad es. Memoria insufficiente).

Non conosco lo scopo di ApplicationException ma la documentazione di Microsoft mette in guardia dall'estenderlo, e non penso che tu possa ottenere qualcosa dal farlo. Non vorrai prendere ApplicationException direttamente poiché potrebbero esserci ApplicationException s che la tua applicazione non ha definito. Quindi avresti bisogno di creare una sottoclasse specifica per la tua applicazione, e in tal caso potresti facilmente estendere Exception .

    
risposta data 07.01.2015 - 16:15
fonte

Leggi altre domande sui tag