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