Множество хороших отзывов, я покажу вам свое мнение.
Правило № 1.ТОЛЬКО ловить исключения, которые вы собираетесь обрабатывать.Под дескриптором я имею в виду дескриптор таким образом, что запрос клиента может продолжаться.Вы можете ловить вещи достаточно долго, чтобы регистрировать информацию (не злоупотребляйте этим, как правило, стека достаточно информации) или конвертировать в другую ошибку, которая распространяется легче (например, на основе среды выполнения).Но, если вы не можете справиться с этим, не беспокойтесь об этом.Это просто дополнительный код, который бесполезен и запутан.Даже когда вы входите в систему или конвертируете, вы в конечном итоге выбрасываете.
Поймите, что большую часть времени вы НЕ МОЖЕТЕ обработать исключение.Действительно.Многие не понимают этого.Но реальность такова, что если вы получаете IOException для чтения или записи на диск, игра окончена.Этот запрос не может быть завершен для пользователя.Если ваша сеть ненадежна и вы не можете общаться с базой данных, то же самое.
Правило № 2.Когда вы получаете исключение, которое вы не можете обработать, единственное, что вы можете сделать, это попытаться потерпеть неудачу таким образом, чтобы это было полезно для пользователя.Это означает, что зарегистрируйте его для последующего анализа (включая исходный стек / причину), а затем сообщите пользователю что-нибудь как можно более полезное.Очистите все, что нужно, чтобы система оставалась в согласованном состоянии.
Учитывая, что это общение с конечным пользователем происходит на очень высоком уровне, это означает, что вы обычно должны ловить на этом уровне.Большую часть времени я обнаруживаю, что при обработке исключений очень мало значения между его точкой начала и верхним уровнем, на котором вы ловите ее для регистрации и отчетности для пользователя.Я часто преобразовываю в форму RuntimeException, но это делается только для облегчения распространения по слоям.
Самая большая и важная вещь - это осознать, что вы обычно не можете обрабатывать исключения, поэтому любой код, для которого вы пишетеони должны быть максимально простыми.