Обработка исключений сложна.Это требует тщательного рассмотрения проекта и способов устранения ошибок.Вы должны попытаться определить Руководство по исключениям в начале вашего проекта и придерживаться его.
Я написал общие Руководства по исключениям лучшие практики, которые я придумал после обширных исследований предмета.Большинство из этих рекомендаций могут быть использованы для всех проектов на любом языке, который поддерживает исключения.Некоторые из рекомендаций будут специфичными для Java.В конце вы должны иметь надежный набор рекомендаций, которые могут помочь вам справиться с исключениями и ошибочными ситуациями и справиться с ними.
Вот несколько моментов, которые следует учитывать
Не раскрывайте внутреннюю реализациюспецифические детали для ваших клиентов
Избегайте предоставления вашим клиентам особых исключений, связанных с внутренней реализацией, особенно тех, которые содержатся в сторонней библиотеке.Это общее объектно-ориентированное эмпирическое правило, которое применимо и к вашей структуре иерархии исключений.Вы не можете контролировать стороннюю библиотеку, которая может изменять сигнатуры исключений и нарушать все ваши контракты API с вашими клиентами.Вместо этого включите эти сторонние исключения (например, SQLException) в ваши собственные пользовательские исключения.Таким образом, у вас будет гораздо больше возможностей для изменения сторонней библиотеки в будущем без нарушения контракта API ваших клиентов.
Создание собственной иерархии исключений для сложных проектов
Вообще говоря, создайте своюсобственная иерархия исключений для более сложных модулей, особенно если вы имеете дело со специфическими для реализации исключениями в сторонних библиотеках.Каждый из ваших пакетов / модулей может иметь свои собственные общие исключения верхнего уровня.Для Java должен быть определен, по крайней мере, один, который наследуется от RuntimeException.Оберните все специфичные для реализации исключения в ваши пользовательские исключения, чтобы ваши клиенты зависели только от ваших пользовательских исключений и / или общих исключений Java.Это даст вам большую гибкость для последующего рефакторинга кода, специфичного для реализации, без нарушения ваших контрактов API.
Если требуется более детальная обработка ошибок, вы можете дополнительно подклассифицировать свои пользовательские исключения для обработки конкретных случаев и обеспечения восстановления после ошибок.,Например, если вы подключаетесь к базе данных SQL, вы можете вызвать исключение ConnectionTimeoutException таким образом, чтобы при необходимости клиент мог повторить соединение N раз, прежде чем отказаться.Таким образом, впоследствии вы можете изменить ядро базы данных на NoSQL и по-прежнему разрешать повторное подключение, а код клиента останется прежним.
Документирование всех исключений
Тщательно документируйте все исключения вашего пакета / модуля / приложениядобавляет определение javadoc для каждого открытого метода.Невыполнение этого требования приведет к разочарованию пользователей API и приведет к тому, что они не будут доверять вашим документам API.Вы на самом деле не хотите, чтобы ваши клиенты копались в вашем источнике, просто чтобы узнать, что вы генерируете конкретное исключение, верно?
Бросайте исключения как можно раньше.
Проверьте все входные данные дляваши публичные методы API и выведите исключение, как только вы обнаружите несоответствия между вашими ожидаемыми параметрами и тем, что было предоставлено.Чем раньше вы создадите исключение, тем меньше вероятность повреждения данных, потому что плохие данные не попадут в более глубокие части вашего кода.Это также дает ценные отзывы вашим клиентам своевременно, а не глубоко в вашем коде, где что-то вызывает неясное исключение с плохим сообщением, таким как «Внутренняя ошибка» или NullPointerException.
Правильно регистрируйте исключения
Следуйте рекомендациям вашей структуры ведения журналов, чтобы правильно регистрировать исключения с их сообщениями и трассировкой стека.Вы не хотите потерять либо