Я читал совет по этому вопросу о том, как следует рассматривать исключение как можно ближе к месту его возникновения.
Моя дилемма в отношении лучшей практики заключается в том, следует ли использовать try / catch / finally для возврата перечисления (или типа int, представляющего значение, 0 для ошибки, 1 для подтверждения, 2 для предупреждения и т. Д., В зависимости от случая), чтобы ответ всегда в порядке, или нужно пропустить исключение, чтобы вызывающая часть справилась с ним?
Из того, что я могу собрать, это может отличаться в зависимости от случая, поэтому оригинальный совет кажется странным.
Например, в веб-сервисе вы всегда хотели бы вернуть состояние, конечно, поэтому любое исключение должно обрабатываться на месте, но, скажем, внутри функции, которая отправляет / получает некоторые данные через http, вы хотели бы, чтобы исключение (например, в случае 404), чтобы просто перейти к тому, кто его запустил. Если вы этого не сделаете, вам придется создать какой-то способ информировать вызывающую часть о качестве результата (ошибка: 404), а также о самом результате.
Хотя можно попробовать перехватить исключение 404 внутри вспомогательной функции, которая получает / публикует данные, не так ли? Только я использую smallint для обозначения состояний в программе (и, конечно, для их надлежащего документирования), а затем использую эту информацию для целей проверки работоспособности (все в порядке / обработка ошибок) снаружи?
Обновление: я ожидал фатального / не фатального исключения для основной классификации, но я не хотел включать это, чтобы не нанести ущерб ответам. Позвольте мне уточнить, о чем идет речь: обработка исключений, а не исключений. Каков желаемый эффект: обнаружите ошибку и попробуйте исправить ее. Если восстановление невозможно, предоставьте наиболее значимый отзыв.
Опять же, с примером http get / post, вопрос в том, должны ли вы предоставить новый объект, который описывает, что случилось с исходным абонентом? Если бы этот помощник находился в используемой вами библиотеке, вы ожидаете, что он предоставит вам код состояния для операции, или вы включите его в блок try-catch? Если вы разрабатываете его, вы бы предоставили код состояния или сгенерировали исключение и позволили верхнему уровню преобразовать его в код состояния / сообщение вместо этого?
Сводка: Как вы выбрали, если часть кода вместо создания исключения возвращает код состояния вместе с любыми результатами, которые он может дать?