Negli anni in cui ho speso la programmazione e lo sviluppo di sistemi, ci sono solo due situazioni in cui ho trovato utile il pattern in questione (in entrambi i casi la supression conteneva anche la registrazione dell'eccezione generata, non considero il catch semplice e null
return come buona pratica).
Le due situazioni sono le seguenti:
1. Quando l'eccezione non è stata considerata uno stato eccezionale
Questo è il momento in cui esegui un'operazione su alcuni dati, che possono essere lanciati, sai che potrebbero essere lanciati ma vuoi comunque che l'applicazione continui a funzionare, perché non hai bisogno dei dati elaborati. Se li ricevi, è buono, se non lo fai, è anche buono.
Potrebbero venire in mente alcuni attributi opzionali di una classe.
2. Quando stai fornendo una nuova implementazione (migliore, più veloce?) 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 genera eccezioni ma restituisce null
in caso di errore. Pertanto, hai creato un adattatore per questa libreria, praticamente copiando l'API originale della libreria e stai utilizzando questa nuova interfaccia (ancora non a lancio) nell'applicazione e gestendoti i controlli null
.
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 vuoi far trapelare le eccezioni all'applicazione principale, quindi le annulli e le registra nell'adattatore che hai creato per avvolgere questa nuova dipendenza.
Il primo caso non è un problema, è il comportamento desiderato del codice. Nella seconda situazione, tuttavia, se dappertutto il valore di ritorno null
dell'adattatore della libreria significa davvero un errore, refactoring dell'API per generare un'eccezione e rilevarlo invece di cercare null
può essere (e in genere il codice è di solito ) una buona idea.
Personalmente uso la supressione 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 invece di null
s.