Я занимаюсь разработкой библиотеки для общения с C ++ ключом.Библиотека предоставит унифицированный интерфейс для связи с различными удаленными ключами исполнения кода, такими как SenseLock, KEYLOK, Guardant Code.
Ключи основаны на технологии смарт-карт и имеют внутреннюю файловую систему и оперативную память.
Типичная рабочая процедура включает в себя (1) перечисление ключей, подключенных к USB-портам, (2) подключение к выбранному ключу, (3) выполнение именованного модуля, передающего входные данные и собирающего выходные данные.
Ну, тривиально, что все эти этапы могут привести к ошибке.Может быть много случаев, но наиболее общими являются:
- Ключ не найден (конечно, смертельный случай).
- Ошибка соединения с ключом (смертельный случай).
- Указанный исполняющий модуль не найден в ключе (?).
- Запрошенная операция не выполнена из-за тайм-аута (?).
- Запрошенная операция требует авторизации (подлежит восстановлению)случай, я полагаю).
- Произошла ошибка памяти при выполнении модуля в ключе (обязательно фатальный случай).
- Произошла ошибка файловой системы в ключе (конечно фатальный случай).
?- Я пока не знаю, считается ли дело фатальным.
Я все еще решаю, создавать ли исключения, возвращать коды ошибок или реализовывать методы для обоих случаев.
Вопросы:
- Заменяют ли исключения коды ошибок полностью или, может быть, мне нужно использовать их только для "смертельных случаев"?
- Является ли смешивание двух парадигм (исключений и кодов ошибок) хорошей идеей?
- Является ли хорошей идеей предоставить пользователю две концепции?
- Существуют ли хорошие примеры исключений и кодов ошибок?Концепция смешивания?
- Как бы вы это реализовали?
Обновление 1.
Было бы интересно узнать больше мнений с разных точек зрения, поэтому я решил добавитьнаграда в 100 репутаций на вопрос.