Natknąłem się na debatę między kilkoma przyjaciółmi i mną. Wolą ogólne wyjątki, takie jak ClientErrorException
i ServerErrorException
ze szczegółami jako pola wyjątku, podczas gdy ja wolę sprecyzować rzeczy. Na przykład mogę mieć kilka wyjątków, takich jak:
BadRequestException
AuthenticationFailureException
ProductNotFoundException
Każdy z nich zbudowany w oparciu o kod błędu zwrócony z interfejsu API.
Po zaletach wyjątków wydaje się to idiomatyczne dla Javy. Jednak opinia moich przyjaciół nie jest niczym niezwykłym.
Czy istnieje preferowany sposób pod względem czytelności kodu i użyteczności interfejsu API, czy naprawdę sprowadza się to do preferencji?
abstract
i uogólnić klasy wyjątków za pomocą metod pobierających, a następnie sprawić, by te szczegółowe były rozszerzane o ogólne. Np AuthenticationFaliureException extends ClientErrorException
. W ten sposób każdy użytkownik może wybrać sposób postępowania z wyjątkami. Oczywiście, to działa więcej. Jednak podczas pisania aplikacji (zamiast biblioteki) jest to inna sytuacja IMHO. W takim przypadku wyjątki nie byłyby bardziej szczegółowe niż potrzebujesz, dla uproszczenia.