2012-07-03 1 views
6

In den meisten Fällen ist es möglich, Ausnahmen in Java abzufangen, auch solche, die nicht überprüft werden. Es ist jedoch nicht unbedingt möglich, etwas dagegen zu tun (z. B. nicht genügend Speicher).Wann sollte man eine Anwendung wegen einer Ausnahme in Java abstürzen lassen (Design-Problem)?

In anderen Fällen ist das Problem, das ich versuche zu lösen, ein Konstruktionsprinzip. Ich versuche, ein Designprinzip oder ein Regelwerk aufzustellen, das angibt, wann man eine Ausnahmesituation aufgeben sollte, selbst wenn sie rechtzeitig erkannt wird. Das Ziel ist, die Anwendung so wenig wie möglich zum Absturz zu bringen.

Hat jemand schon Brainstorming und kommuniziert darüber? Ich suche nach spezifischen generischen Fällen und möglichen Lösungen oder Daumenregeln.

UPDATE

Vorschläge bisher:

  • Stopp zu laufen, wenn die Datenkohärenz beeinträchtigt werden kann
  • Stopp ausgeführt wird, wenn Daten
  • gelöscht werden können
  • Stopp laufen, wenn Sie nicht tun können, alles darüber (Nicht genügend Arbeitsspeicher ...)
  • Stoppen Sie, wenn der Schlüssel-Service nicht verfügbar ist oder Beco mes nicht verfügbar und kann nicht

  • Verfahren/Dienst neu gestartet werden sollte prüfen, ob es seine Pflicht, von einem stabilen Zustand durchführen können, wenn nicht, sollten sie den Benutzer darüber informieren (log) und nichts

  • tun Wenn die Anwendung beendet werden muss degradieren so anmutig wie möglich
  • Verwendung Rollbacks in db Transaktionen
  • Customized Ausnahmen verwendet werden können, Tipps zu geben, wie die Situation von Handler, wie Sie
  • Log so viele relevante Informationen lösen können
  • Benachrichtigen Sie den Entwickler
  • Zustand und die Datenkohärenz so viel erhalten, wie Sie können

  • Quick Fixes schädlich sein kann, wenn das Debuggen, besser die Anwendung abstürzen lassen und in Einzelheiten analysieren, was es verursacht

+2

Wenn Ihre Anwendung wichtig ist (zum Beispiel der Server, der eine Anlage steuert), muss Ihre Anwendung 1) den Typ anrufen, der sie reparieren muss 2) so lange laufen, wie es sicher nicht alles löscht (Datenkohärenz kann fast nie sein kompromittiert). –

+3

Im Idealfall sollte Ihre Anwendung niemals abstürzen. Ihre Anwendung sollte jedoch ordnungsgemäß fehlschlagen, wenn eine Komponente wie eine Datenbank oder eine Kamera fehlt oder nicht erreichbar ist. –

+0

Ich hätte gedacht, dass Sie für eine Menge seriöser RuntimeExceptions keine Wahl haben, ob Sie es abstürzen lassen, es sei denn, Sie wickeln das sehr öffnende Bit in einem try ... catch-Block. –

Antwort

1

Warum und wann eine Anwendung abstürzen lassen keine besonderen Regeln hat ...... ich lasse meinen Absturz der Anwendung aus den folgenden Gründen:

1. Quick Fixes Kick-back und poten sind riskant. Ich finde es nicht richtig, den Fehler zu beheben, ohne zu wissen, was der eigentliche Grund für meinen Code-Absturz war. Das Abstürzen der Anwendung führt mich zu dem Fehler in meinem Code.

2. Den Code abstürzen hilft mir, die Programmiersprache und logische Fehler besser zu verstehen.

Das für die Vermietung der App Absturz mein Grund ist ..

2

Die Schöpfer von Java und.Net entschied sich, den TYPE eines geworfenen Ausnahmeobjekts zu verwenden, um zu bestimmen, wann es abgefangen werden sollte und wann es als gelöst betrachtet werden sollte, eine Designentscheidung, die wahrscheinlich durch die Art und Weise motiviert wurde, wie C++ Ausnahmen behandelt. Obwohl die C++ - Ausnahmebehandlung in vielerlei Hinsicht eine Verbesserung gegenüber dem war, was vorher existierte, war die Verwendung des Typs eines Ausnahmebedürfnisses als das primäre Mittel zum Bestimmen, welche Ausnahmen abgefangen wurden, keine seiner besseren Eigenschaften.

Da die Ausnahmebedingung vom Ausnahmetyp gesteuert wird, gibt es keine Standardmethode für die Ausnahmebedingung, um anzugeben, ob eine fehlgeschlagene Operation den Status von Objekten im System geändert hat oder ob der Fehler durch beschädigte Objekte verursacht wurde (im Gegensatz zu einem Zustand, der, obwohl er vom Aufrufer nicht erwartet werden kann und nicht mit den übergebenen Parametern kompatibel ist, ansonsten von der aufgerufenen Methode als vollkommen legitim angesehen würde). In vielen Fällen ruft das System als Reaktion auf eine Benutzeranforderung eine Methode auf, die versucht, etwas zu tun, was nicht möglich ist, aber die Methode wirkt sich nicht nachteilig auf den Status eines Objekts aus, und das Problem wird nicht durch ein Objekt verursacht korrumpierten Zustand ist es oft am besten, den Benutzer einfach darüber zu informieren, dass die angeforderte Aktion nicht ausgeführt werden konnte, und weitermachen. Leider gibt es keine Möglichkeit, die "harmlosen" Ausnahmen der oben genannten Typen von denen zu unterscheiden, die auf schwerwiegende systemweite Probleme hinweisen. Während 99% der Ausnahmen wahrscheinlich relativ harmlos sind, wird ein kleiner Bruchteil durch Bedingungen verursacht, die zum Öffnen von Dokumenten führen können. Wenn ein geöffnetes Dokument beschädigt wurde, ist es möglicherweise besser, wenn ein Programm sofort abstürzt, als wenn es eine gute Kopie auf der Festplatte durch eine beschädigte ersetzt.

Wenn benutzerdefinierte Ausnahmen ausgelöst werden, kann es möglich sein, Eigenschaften in den Ausnahmetyp aufzunehmen, die es dem Code ermöglichen würden, etwas sinnvoller zu entscheiden, was mit einer Ausnahme geschehen soll. Leider enthalten viele Ausnahmen, die ausgelöst werden, ob harmlos oder nicht, solche Eigenschaften nicht.

1

Das Abstürzen der Anwendung hängt von der kritischen Ebene der Anwendung und der Bereitstellungsarchitektur ab.

Für ein Beispiel sollte die Anwendung nicht abstürzen, wenn sie eine Rakete von der Erde aus steuert (außer für unkontrollierbare Situationen und Datenpriorität).

Wenn Anwendungen entworfen werden, sollten Sie sie so entwerfen, dass keine Daten in Datenspeichern gelöscht oder geändert werden.

Abschließend gibt es keine harte und schnelle Möglichkeit, Regeln festzulegen, wenn Anwendungen abstürzen sollten.

Verwandte Themen