Должен ли пользовательский ввод вызывать проверенные исключения?

У меня есть операция/метод, который выполняет вставку в базу данных. Требуется несколько полей, и по разным причинам эта операция может завершиться неудачно, поскольку один или несколько входных данных не уникальны или конфликтуют с некоторыми внутренними записями, которые должны быть уникальными.

saveUserInfo(primaryToken,secondaryToken,userid);

Имеет ли смысл выбрасывать проверенное исключение при каждом нарушении?

Я думал использовать следующее:

saveUserInfo(String primaryToken, String secondaryToken, String id) 
throws PrimaryTokenTakenException,SecondaryTokenTakenException

заставляя любого разработчика, который вызывает этот метод, иметь дело с ним, перенаправляя веб-пользователя на страницу с запросом нового токена.

Возражение Противники этого подхода указывают, что мы, команда разработчиков, знаем о каждом случае ошибки, которая может привести к сбою, и вместо этого должны возвращать код ошибки и использовать его для обработки каждого случая. .

int errorCode = saveUserInfo(primaryToken,secondaryToken,userid);

Я не вижу явных недостатков проверенного подхода. Эти случаи ошибок очень вероятны, и вы обязательно должны устранять их везде, где используется saveUserInfo(). Похоже, именно для этой ситуации и были созданы проверяемые исключения.


person Usman Mutawakil    schedule 18.08.2015    source источник
comment
Исключения, которые ожидаются, не очень исключительны, не так ли?   -  person    schedule 19.08.2015
comment
@JarrodRoberson Я приму ваше отрицательное мнение и очень конструктивную статью в качестве исключения во время выполнения.   -  person Usman Mutawakil    schedule 19.08.2015


Ответы (1)


Это, безусловно, правильный и разумный подход к использованию проверенных исключений для обработки недопустимого пользовательского ввода, если ваша программа способна обнаруживать и правильно восстанавливать такие случаи. Отмеченные исключения просто означают, что ваши программные интерфейсы должны установить и следовать контракту в отношении обработки логических ошибок программы, тогда как непроверенные (во время выполнения) исключения — это исключения, которые возникают таким образом, что ваша программа не может безопасно восстановиться после них во время выполнения. Метод, с помощью которого вы обрабатываете исключения, может зависеть от философии вашей команды разработчиков, но случай проверенных и непроверенных по-прежнему актуален — вы знаете, как обнаруживать недопустимые входные данные и разумно восстанавливать их, поэтому вы должны обязан что-то с этим делать.

См. руководство на этой странице, посвященной исключениям в Java.

person Ryan J    schedule 18.08.2015