Я пытаюсь выяснить, какая правильная форма исключений для броска будет для библиотеки, которую я пишу. Одним из примеров того, что мне нужно, является регистрация пользователя на станции. Они делают это, просматривая значок. Возможные вещи, которые могут пойти не так, включают:
- Значок деактивирован.
- У них нет разрешения на работу на этой станции
- Отсканированный значок не существует в системе
- Они уже вошли на другую станцию в другом месте
- База данных не работает
- Внутренняя ошибка БД (иногда бывает, если значок неправильно настроен)
Приложение, использующее эту библиотеку, должно будет обрабатывать эти исключения так или иначе. Возможно, они могут решить просто сказать "Ошибка", или они могут захотеть предоставить пользователю более полезную информацию. Какая лучшая практика в этой ситуации? Создать настраиваемое исключение для каждой возможности? Использовать существующие исключения? Используйте Исключение и пропустите причину (throw new Exception("Badge is deactivated.");
)? Я думаю, что это что-то вроде сочетания первых двух, используя существующие исключения, где это применимо, и создавать новые, где это необходимо (и группировать исключения, когда это имеет смысл).