Sono un po 'in disaccordo con uno sviluppatore più esperto su questo problema, e mi chiedo cosa ne pensino 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 avuto eccezioni di puntatori nulli che non avevano senso. Ad esempio, quando chiedo al servizio di creare un oggetto, ottengo null; quando provo a cercare un oggetto con un ID valido noto, ottengo null. Ho passato un po 'di tempo a cercare di capire cosa c'era di sbagliato nel mio codice; dal momento che sono meno esperto di solito ritengo di aver fatto qualcosa di sbagliato, ma si scopre che la ragione per i ritorni nulli è stata la sicurezza. Se l'utente principale che utilizza il mio servizio non ha le autorizzazioni giuste per il servizio di destinazione, restituisce semplicemente null. Anche la maggior parte degli altri servizi qui non sono ben documentati, quindi a quanto pare 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 fosse un'eccezione che mi dicesse che l'utente non aveva le autorizzazioni appropriate per caricare questa cosa o per creare quella cosa; Vorrei quindi sapere immediatamente 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 generate in una condizione di errore, non quando l'utente non ha accesso ai dati. Questi dati sono spesso consultati in una GUI e per quegli utenti senza le giuste autorizzazioni, queste cose semplicemente "non esistono". Quindi, in breve: chiedere non è sbagliato, quindi nessuna eccezione. Ottieni metodi restituisce null perché a quegli utenti quelle cose "non esistono". Creare metodi restituisce null quando all'utente non è stato permesso di creare quella cosa.
Questa è normale e / o buona pratica? Preferisco usare le eccezioni perché trovo molto più facile sapere cosa sta succedendo. Quindi, ad esempio, preferirei anche lanciare una NotFoundException se hai richiesto un oggetto con un ID non valido, piuttosto che restituire null.