Ich kämpfe mit einer sehr einfachen Frage:
Ich arbeite jetzt an einer Serveranwendung und muss eine Hierarchie für die Ausnahmen erfinden (einige Ausnahmen existieren bereits, aber ein allgemeines Framework ist erforderlich). Wie fange ich überhaupt damit an?
Ich denke darüber nach, diese Strategie zu verfolgen:
1) Was läuft falsch?
- Es wird etwas gefragt, was nicht erlaubt ist.
- Es wird etwas gefragt, es ist erlaubt, aber es funktioniert aufgrund falscher Parameter nicht.
- Es wird etwas gefragt, es ist erlaubt, aber es funktioniert aufgrund interner Fehler nicht.
2) Wer startet die Anfrage?
- Die Client-Anwendung
- Eine andere Serveranwendung
3) Nachrichtenübergabe: Beim Umgang mit einer Serveranwendung dreht sich alles um das Empfangen und Senden von Nachrichten. Was ist, wenn das Senden einer Nachricht schief geht?
Daher erhalten wir möglicherweise folgende Ausnahmetypen:
- ServerNotAllowedException
- ClientNotAllowedException
- ServerParameterException
- ClientParameterException
- InternalException (falls der Server nicht weiß, woher die Anforderung kommt)
- ServerInternalException
- ClientInternalException
- MessageHandlingException
Dies ist ein sehr allgemeiner Ansatz zur Definition der Ausnahmehierarchie, aber ich befürchte, dass mir einige offensichtliche Fälle fehlen könnten. Haben Sie Ideen zu den Bereichen, die ich nicht abdecke, sind Sie sich der Nachteile dieser Methode bewusst oder gibt es einen allgemeineren Ansatz für diese Art von Frage (im letzteren Fall, wo finde ich sie)?
Danke im Voraus
catch
ich für die meisten Blöcke, die ich verwende, nicht viel mehr Verwendung für die Ausnahme als für die darin enthaltene Fehlermeldung. Ich habe nicht wirklich etwas anderes, was ich für eine Ausnahme tun kann, die darin besteht, dass eine Datei nicht gelesen werden kann, da eine Datei beim Lesen nicht zugeordnet werden kann. Daher neige ich dazu, nur std::exception
die darin enthaltene Fehlermeldung abzufangen und zu melden, möglicherweise zu dekorieren es mit "Failed to open file: %s", ex.what()
einem Stapelpuffer vor dem Drucken.
catch
Blöcke in einer einzelnen Wiederherstellungssite verwenden, aber oft ist es nur, die Nachricht innerhalb der Ausnahme zu ignorieren und eine lokalere Nachricht zu drucken ...