Sono un po 'in disaccordo con uno sviluppatore più esperto su questo problema e mi chiedo cosa ne pensano gli altri; il nostro ambiente è Java, EJB 3, servizi, ecc.
Il codice che ho scritto chiama un servizio per ottenere cose e creare cose. Il problema che ho riscontrato è che ho ricevuto eccezioni con puntatore null che non avevano senso. Ad esempio, quando chiedo al servizio di creare un oggetto, ottengo indietro nulla; quando provo a cercare un oggetto con un ID valido noto, ottengo indietro. Ho trascorso un po 'di tempo a cercare di capire cosa c'era di sbagliato nel mio codice; dal momento che sono meno esperto, di solito presumo di aver fatto qualcosa di sbagliato, ma si scopre che la ragione per i rendimenti nulli è stata la sicurezza. Se l'entità utente che utilizza il mio servizio non disponeva delle autorizzazioni giuste per il servizio di destinazione, restituisce semplicemente null. La maggior parte degli altri servizi qui non sono documentati molto bene, quindi apparentemente questo è solo qualcosa che devi sapere.
Questo è piuttosto confuso come uno sviluppatore che scrive codice che interagisce con il servizio. Avrebbe molto più senso per me se il servizio rappresentasse un'eccezione che mi direbbe che l'utente non aveva le autorizzazioni appropriate per caricare questa cosa o crearla; Vorrei quindi immediatamente sapere perché il mio servizio non funzionava come previsto.
Lo sviluppatore più esperto che ha scritto il servizio ha sostenuto che la richiesta dei dati non è una condizione di errore e che le eccezioni dovrebbero essere lanciate solo in una condizione di errore, non quando l'utente non ha accesso ai dati. Questi dati vengono spesso cercati in una GUI e per quegli utenti senza le giuste autorizzazioni, queste cose semplicemente "non esistono". Quindi, in breve: chiedere non è sbagliato, quindi non fa eccezione. I metodi get restituiscono null perché a quegli utenti queste cose "non esistono". I metodi di creazione restituiscono null quando l'utente non è stato autorizzato a creare quella cosa.
È normale e / o buona pratica? Preferisco usare le eccezioni perché trovo molto più facile sapere cosa sta succedendo. Quindi, ad esempio, preferirei anche lanciare NotFoundException se chiedessi un oggetto con un ID non valido, piuttosto che restituire null.