Können Sie ein Entwurfsmuster / einen Ansatz zum Offenlegen / Tolerieren / Wiederherstellen von Systemfehlern, Ausnahmebehandlung (Java, C ++, Perl, PHP) empfehlen?
Einige Fehler müssen gemeldet werden.
Einige Fehler können intern behandelt werden (durch einen erneuten Versuch oder sind nicht relevant (können ignoriert werden).
Wie strukturieren Sie den Code, um sie zu fangen?
Es müssen aber alle Fehler protokolliert werden.
Welche Best Practices gibt es?
Und um sie zu simulieren, um Komponenten, die von ihnen betroffen sind, vollständig zu testen?
Allgemeine, nicht programmiersprachenspezifische Frage, die auf mehrere moderne Programmiersprachen anwendbar ist, würde jedoch beispielhafte Darstellungen von Mustern, Ansätzen und Philosophien in Java, C ++, PHP und Perl begrüßen.
(Auch in stackoverflow gefragt: /programming/7432596/recommend-a-design-pattern-approach-to-exposing-tolerating-recovering-from-system, aber ich dachte, es sollte auch auf Programmierer gefragt werden, weil Ich denke, die Fragen und Antworten der Programmierer decken umfassendere Software- / Programmierprobleme ab, während sich Stackoverflow mehr auf die technische Implementierung bezieht (IMHO).
quelle
Antworten:
Schnelles Scheitern ist ein großartiger Entwurfsansatz und kann möglicherweise als Muster gewertet werden: http://en.wikipedia.org/wiki/Fail-fast
Ich habe auch eine Reihe von Grundsätzen für nützlich befunden:
quelle
Nachdem ich mit Ausnahmen in Java und .NET gearbeitet und viele Artikel gelesen hatte, in denen es darum ging, wie / wann / warum Ausnahmen abgefangen werden sollen, stellte ich mir schließlich die folgenden Schritte vor, die ich in meinem Kopf durcharbeite, wenn eine potenzielle Ausnahme auftritt oder eine Ausnahme muss ich fangen (Java) ... auch wenn es nie passiert (seufz ...). Und es scheint zumindest für mich zu funktionieren:
Ich sollte auch den Schritt 0 hinzufügen , in dem ich absichtlich eine so genannte "Business" -Ausnahme (eine neue Ausnahme, die ich durch Erweitern der Klasse "Exception" erstelle) auslöse, wenn eine komplexe Behandlung aufgrund von Datenfehlern nicht ausgeführt werden kann, ABER das Es ist bekannt, dass dies passiert, da sie während der Analyse als Ausnahmefälle identifiziert wurden.
Mit Ausnahme des Protokollierungsteils stimme ich den von "mikera" geschriebenen Punkten voll und ganz zu. Ich möchte nur hinzufügen, dass die Ausnahme nur einmal protokolliert werden sollte .
Die Schritte , die ich aufgelistet habe, können sich auch unterscheiden, wenn Sie eine API / ein Framework schreiben . Dort ist das Auslösen gut gestalteter Ausnahmen obligatorisch, um Entwicklern das Verständnis ihrer Fehler zu erleichtern.
Zum Testen der Ausnahmen sollten Sie mit Scheinobjekten in der Lage sein, fast alles zu testen, unabhängig davon, ob es sich um Ausnahmen handelt oder nicht, vorausgesetzt, Ihre Klassen respektieren die Best Practice "Eine Klasse, um eine Sache zu tun". Ich persönlich stelle auch sicher, dass die wichtigsten, aber verborgenen Methoden als "geschützt" anstatt als "privat" gekennzeichnet werden, damit ich sie ohne großen Aufwand testen kann. Abgesehen davon ist das Testen von Ausnahmen einfach. Sie müssen nur die Ausnahme provozieren und das Auftreten einer Ausnahme "erwarten", indem Sie sie abfangen. Wenn Sie keine Ausnahme erhalten, liegt ein Unit-Testfallfehler vor.
quelle
Bauen Sie Ihre Objekte richtig und machen Sie sich keine Sorgen um äußere Einflüsse. Wenn Sie sich dafür entscheiden, Ausnahmen zu nutzen, lassen Sie Ihre Objekte Ausnahmen auslösen, wenn sie bei etwas fehlschlagen .
Sobald alle Ihre Objekte ordnungsgemäß funktionieren, sollte es ziemlich einfach sein, eine saubere Hierarchie für die Fehlerbehandlung in Ihrem Entwurf zu erstellen.
quelle