Walczę z bardzo prostym pytaniem:
Pracuję teraz nad aplikacją serwerową i muszę wymyślić hierarchię wyjątków (niektóre wyjątki już istnieją, ale potrzebna jest ogólna struktura). Jak w ogóle zacząć to robić?
Myślę o zastosowaniu tej strategii:
1) Co się dzieje nie tak?
- Pytanie o coś jest niedozwolone.
- Coś jest pytane, jest dozwolone, ale nie działa z powodu złych parametrów.
- Coś jest pytane, jest dozwolone, ale nie działa z powodu błędów wewnętrznych.
2) Kto uruchamia żądanie?
- Aplikacja kliencka
- Kolejna aplikacja serwera
3) Przekazywanie wiadomości: ponieważ mamy do czynienia z aplikacją serwera, chodzi przede wszystkim o odbieranie i wysyłanie wiadomości. A co jeśli wysłanie wiadomości nie powiedzie się?
W związku z tym możemy uzyskać następujące typy wyjątków:
- ServerNotAllowedException
- ClientNotAllowedException
- ServerParameterException
- ClientParameterException
- InternalException (w przypadku, gdy serwer nie wie, skąd pochodzi żądanie)
- ServerInternalException
- ClientInternalException
- MessageHandlingException
Jest to bardzo ogólne podejście do definiowania hierarchii wyjątków, ale obawiam się, że brakuje mi oczywistych przypadków. Czy masz pomysły na obszary, których nie omawiam, czy znasz jakieś wady tej metody lub czy istnieje bardziej ogólne podejście do tego rodzaju pytań (w drugim przypadku, gdzie mogę je znaleźć)?
Z góry dziękuję
catch
bloków, których używam, wyjątek nie jest większy niż w komunikacie o błędzie. Naprawdę nie mam nic innego, co mogę zrobić dla wyjątku związanego z nieumiejętnością odczytania pliku, ponieważ nie udało się przydzielić pamięci podczas procesu odczytu, więc zwykle wychwytuję std::exception
i zgłaszam komunikat o błędzie, który on zawiera, może dekorowanie to z "Failed to open file: %s", ex.what()
buforem stosu przed wydrukowaniem.
catch
bloków w jednej witrynie odzyskiwania, ale często to po prostu zignorowanie wiadomości w wyjątku i wydrukowanie bardziej zlokalizowanej wiadomości ...