Entrei em um debate entre alguns amigos e eu. Eles preferem exceções gerais como ClientErrorException
e ServerErrorException
com detalhes como campos da exceção, enquanto eu prefiro tornar as coisas mais específicas. Por exemplo, eu posso ter algumas exceções, como:
BadRequestException
AuthenticationFailureException
ProductNotFoundException
Cada uma delas foi criada com base no código de erro retornado da API.
Após as vantagens das exceções, isso parece idiomático para Java. No entanto, a opinião dos meus amigos não é exatamente incomum.
Existe uma maneira preferida em termos de legibilidade do código e usabilidade da API, ou realmente se resume apenas à preferência?
abstract
e generalizar classes de exceção com os métodos getter e, em seguida, fazer com que as granulares estendam as gerais. Por exemplo AuthenticationFaliureException extends ClientErrorException
. Dessa forma, todo usuário pode escolher como gostaria de lidar com as exceções. É mais trabalho, obviamente. No entanto, ao escrever um aplicativo (em vez de uma biblioteca), é uma situação diferente IMHO. Nesse caso, eu não tornaria as exceções mais granulares do que você precisa, por uma questão de simplicidade.