Я борюсь с очень простым вопросом:
Сейчас я работаю над серверным приложением, и мне нужно изобрести иерархию для исключений (некоторые исключения уже существуют, но необходима общая структура). Как мне вообще начать это делать?
Я думаю о следующей стратегии:
1) Что не так?
- Что-то спрашивают, что не разрешено.
- Что-то спрашивают, это разрешено, но не работает из-за неправильных параметров.
- Что-то спрашивают, это разрешено, но не работает из-за внутренних ошибок.
2) Кто запускает запрос?
- Клиентское приложение
- Другое серверное приложение
3) Передача сообщений: поскольку мы имеем дело с серверным приложением, все дело в получении и отправке сообщений. Так что, если отправка сообщения идет не так?
Таким образом, мы можем получить следующие типы исключений:
- ServerNotAllowedException
- ClientNotAllowedException
- ServerParameterException
- ClientParameterException
- InternalException (в случае, если сервер не знает, откуда поступает запрос)
- ServerInternalException
- ClientInternalException
- MessageHandlingException
Это очень общий подход для определения иерархии исключений, но я боюсь, что мне может не хватать некоторых очевидных случаев. У вас есть идеи по тем областям, которые я не рассматриваю, вам известны какие-либо недостатки этого метода или есть более общий подход к такого рода вопросам (в последнем случае, где я могу его найти)?
заранее спасибо
catch
блоков, которые я использую, я не использую намного больше исключений, чем какое сообщение об ошибке оно содержит. У меня нет ничего особенного, что я могу сделать для исключения, связанного с невозможностью прочитать файл как файл, который не выделяет память во время процесса чтения, поэтому я склонен просто ловить std::exception
и сообщать о сообщении об ошибке, которое в нем содержится, возможно, украшающем это с "Failed to open file: %s", ex.what()
буфером стека перед печатью.
catch
блоков на одном сайте восстановления, но часто это просто игнорирование сообщения внутри исключения и печать более локализованного сообщения ...