Скажем, у нас есть метод changeUserName(Long id,String newName)
, который вызывает findUser(Long id)
репозитория, чтобы найти нужный пользовательский объект, а затем изменить его имя.
Уместно ли перекачивать IllegalArgmentException
, когда findUser
возвращает null?
Или я должен вместо этого добавить пользовательский UserNotExistException
(extends AppException extends RuntimeException)?Должен ли я бросать исключение IllegalArgmentException, когда «пользователь данного идентификатора не существует»?
UPDATE:
RuntimeException
:
@nachokk @JunedAhsan На самом деле я сознательно сделать все исключенияunchecked
, потому что я думаю, что этот способ делает код клиента чистый, легкий для отладки и более безопасный. Что касается этих «необработанных», я поймаю их всех на вершине слоев, избегая показывать их в пользовательском интерфейсе.
Это связано с тем, что многие клиенты ловятchecked exceptions
, а затем просто игнорируют его, и в некоторых случаях они не знают, как с ним справиться. Это скрытая проблема.Уточнение:
Извините за мой плохой английский. Я имел в виду, если changeUserName должен броситьIllegalArgumentException
, а неfindUser
. И еще один вопрос: как отличитьillegal argument
отbusiness rule violation
?
@robjohncox спасибо за перевод на английский xD – nachokk
Не проблема, это не требовало большого перевода :) – robjohncox
Будет ли этот код компилироваться без предложения бросков в определении метода? –