La scorsa settimana abbiamo avuto un argomento scottante sulla gestione dei valori null nel livello di servizio della nostra applicazione. La domanda è nel contesto .NET, ma sarà la stessa in Java e in molte altre tecnologie.
La domanda era: dovresti controllare sempre i valori nulli e fare in modo che il tuo codice funzioni, o lasciare che un'eccezione si apra quando un null viene ricevuto in modo imprevisto?
Da un lato, il controllo di null dove non lo si aspetta (ovvero non ha un'interfaccia utente per gestirlo) è, a mio parere, lo stesso che scrivere un blocco try con un catch vuoto. Stai solo nascondendo un errore. L'errore potrebbe essere che qualcosa è cambiato nel codice e null ora è un valore previsto, oppure c'è qualche altro errore e l'ID sbagliato viene passato al metodo.
D'altro canto, il controllo dei valori null può essere una buona abitudine in generale. Inoltre, se c'è un controllo l'applicazione può continuare a funzionare, con solo una piccola parte della funzionalità che non ha alcun effetto. Quindi il cliente potrebbe segnalare un piccolo bug come "impossibile eliminare il commento" invece di un bug molto più grave come "impossibile aprire la pagina X".
Quale pratica segui e quali sono i tuoi argomenti a favore o contro entrambi gli approcci?
Aggiornamento:
Voglio aggiungere alcuni dettagli sul nostro caso particolare. Stavamo recuperando alcuni oggetti dal database e li abbiamo elaborati (diciamo, costruiamo una collezione). Lo sviluppatore che ha scritto il codice non ha previsto che l'oggetto potesse essere nullo, quindi non ha incluso alcun controllo, e quando la pagina è stata caricata c'è stato un errore e l'intera pagina non è stata caricata.
Ovviamente, in questo caso avrebbe dovuto esserci un assegno. Quindi abbiamo discusso se ogni oggetto che viene processato debba essere controllato, anche se non ci si aspetta che manchi, e se l'eventuale elaborazione debba essere interrotta silenziosamente.
Il vantaggio ipotetico sarebbe che la pagina continuerà a funzionare. Pensa ai risultati di una ricerca su Stack Exchange in diversi gruppi (utenti, commenti, domande). Il metodo potrebbe verificare null e interrompere l'elaborazione degli utenti (che a causa di un bug è nullo) ma restituire le sezioni "commenti" e "domande". La pagina continuerà a funzionare eccetto che mancherà la sezione "utenti" (che è un bug). Dovremmo fallire presto e rompere l'intera pagina o continuare a lavorare e aspettare che qualcuno si accorga che manca la sezione "utenti"?