Иногда вы хотите скрыть детали реализации метода или улучшить
уровень абстракции проблемы, чтобы она была более значимой для звонящего
метода. Для этого вы можете перехватить исходное исключение и заменить
пользовательское исключение, которое лучше подходит для объяснения проблемы.
Возьмем, к примеру, метод, который загружает данные запрашиваемого пользователя из текстового файла. Метод предполагает, что существует текстовый файл с именем пользователя и суффиксом «.data». Когда этот файл на самом деле не существует, не имеет смысла выдавать исключение FileNotFoundException, потому что тот факт, что сведения о каждом пользователе хранятся в текстовом файле, является внутренней особенностью метода. Таким образом, этот метод может вместо этого обернуть исходное исключение в пользовательское исключение пояснительным сообщением.
В отличие от показанного вами кода, рекомендуется использовать исходное исключение, загрузив его как свойство InnerException вашего нового исключения. Это означает, что разработчик может при необходимости проанализировать основную проблему.
Когда вы создаете пользовательское исключение, вот полезный контрольный список:
• Найдите хорошее имя, которое объясняет, почему возникло исключение, и убедитесь, что имя заканчивается словом «Исключение».
• Убедитесь, что реализованы три стандартных конструктора исключений.
• Убедитесь, что вы отметили свое исключение атрибутом Serializable.
• Убедитесь, что реализован конструктор десериализации.
• Добавьте любые пользовательские свойства исключений, которые могут помочь разработчикам лучше понять и обработать ваше исключение.
• Если вы добавляете какие-либо пользовательские свойства, убедитесь, что вы внедрили и переопределите GetObjectData для сериализации ваших пользовательских свойств.
• Если вы добавляете какие-либо пользовательские свойства, переопределите свойство Message, чтобы вы могли добавить свои свойства к стандартному сообщению об исключении.
• Не забудьте прикрепить исходное исключение, используя свойство InnerException вашего пользовательского исключения.