Ho incontrato un dibattito tra alcuni amici e I. Preferiscono eccezioni generali come ClientErrorException
e ServerErrorException
con i dettagli come campi dell'eccezione, mentre preferisco rendere le cose più specifiche. Ad esempio, potrei avere una manciata di eccezioni come:
BadRequestException
AuthenticationFailureException
ProductNotFoundException
Ognuno di questi costruito sulla base del codice di errore restituito dall'API.
A seguito dei vantaggi delle eccezioni questo sembra idiomatico a Java. Tuttavia, l'opinione dei miei amici non è esattamente insolita.
Esiste un modo preferito in termini di leggibilità del codice e usabilità dell'API o si riduce davvero alle preferenze?
abstract
e generalizzare le classi di eccezione con i metodi getter e quindi estendere quelle granulari a quelle generali. Es AuthenticationFaliureException extends ClientErrorException
. In questo modo, ogni utente può scegliere come gestire le eccezioni. Più lavoro però, ovviamente. Tuttavia, quando si scrive un'applicazione (anziché una libreria), è una situazione diversa IMHO. In tal caso, non renderei le eccezioni più granulari di quanto tu ne abbia bisogno, per motivi di semplicità.