Я бы не бросил никаких исключений, а просто возвратил бы null
.Или я бы вызвал функциональное исключение под названием UserDoesNotExistException
.
. Вот мои рассуждения: IllegalStateException
используется, когда пользователь вызывает метод, который запрещен, учитывая состояние объекта.Здесь не состояние объекта вызывает исключение.Это факт, что пользователь не существует в базе данных.
Вы можете утверждать, что пользователь должен был вызвать userExists
раньше, и что этот метод мог даже запомнить, используя поле экземпляра, что он был вызван (с этим аргументом), так что IllegalStateException
может быть выдан getUser
даже без обращения к базе данных.
Но проблема здесь в том, что вызов userExists
перед тем, как, вероятно, ничего не добавляет: он выполнит запрос, чтобы проверить, существует ли пользователь,тогда getUser
выполнит второй запрос, и гарантированно не найдет пользователя, так как другая транзакция могла удалить его.