Negli anni in cui ho trascorso la programmazione e lo sviluppo di sistemi, ci sono solo due situazioni in cui ho trovato utile lo schema in questione (in entrambi i casi la soppressione conteneva anche la registrazione dell'eccezione generata, non considero la semplice cattura e il null
ritorno come una buona pratica ).
Le due situazioni sono le seguenti:
1. Quando l'eccezione non è stata considerata uno stato eccezionale
Questo è quando si esegue un'operazione su alcuni dati, che può essere lanciata, si sa che potrebbe essere lanciata, ma si desidera comunque che l'applicazione continui a funzionare, poiché non sono necessari i dati elaborati. Se li ricevi, è buono, se non lo fai, è anche buono.
Potrebbero venire in mente alcuni attributi opzionali di una classe.
2. Quando si fornisce una nuova (migliore, più veloce?) Implementazione di una libreria utilizzando un'interfaccia già utilizzata in un'applicazione
Immagina di avere un'applicazione che utilizza una sorta di vecchia libreria, che non ha null
generato eccezioni ma restituita per errore. Quindi hai creato un adattatore per questa libreria, praticamente copiando l'API originale della libreria e stai usando questa nuova interfaccia (ancora non lanciante) nella tua applicazione e gestendo null
tu stesso i controlli.
Viene una nuova versione della libreria, o forse una libreria completamente diversa che offre la stessa funzionalità, che, invece di restituire null
s, genera eccezioni e si desidera utilizzarla.
Non si desidera perdere le eccezioni all'applicazione principale, quindi è necessario sopprimerle e registrarle nell'adattatore creato per avvolgere questa nuova dipendenza.
Il primo caso non è un problema, è il comportamento desiderato del codice. Nella seconda situazione, tuttavia, se ovunque il null
valore restituito dell'adattatore della libreria significhi davvero un errore, refactoring dell'API per generare un'eccezione e catturarla invece di verificare null
potrebbe essere (e in genere il codice è una buona idea).
Personalmente uso la soppressione delle eccezioni solo per il primo caso. L'ho usato solo per il secondo caso, quando non avevamo il budget per far funzionare il resto dell'applicazione con le eccezioni anziché con null
s.