Frage

Angenommen, Sie eine Methode mit einigen Pre-und Post-Bedingungen. Ist es in Ordnung, eine Ausnahmeklasse für jede Voraussetzung zu schaffen, die nicht erreicht wird? Zum Beispiel: Nicht erreichen pre1 Mittel eine notPre1Exception Instanz zu werfen.

War es hilfreich?

Lösung

Ja und nein.

Ja - eine Voraussetzung Verletzen ist sicherlich eine angemessene Zeit, um eine Ausnahme zu werfen. eine spezifischere Ausnahme werfen wird, dass spezifische Ausnahme einfacher machen zu kontrollieren.

Nein - eine neue Ausnahmeklasse für jede Vorbedingung in Ihrem Programm Deklarieren / api scheint Art und Weise übertrieben. Dies könnte schließlich in Hunderten oder Tausenden von Ausnahmen führen. Dies scheint eine Verschwendung sowohl mental als auch rechnerisch.

Ich würde empfehlen, Ausnahmen für Voraussetzung Verletzungen zu werfen. Ich würde jedoch nicht empfehlen für jede Bedingung eine neue Ausnahme definieren. Stattdessen würde ich breitere Klassen von Ausnahmen empfehlen die Erstellung, die eine bestimmte abdecken type der Voraussetzung Verletzung, anstatt eine bestimmte Voraussetzung Verletzung. (Ich würde auch empfehlen, bestehende Ausnahmen verwenden, wo sie gut passen.)

Andere Tipps

Warum würden Sie nicht wollen PreconditionFailedException (string Voraussetzung) definieren? eine andere Ausnahmetyp für jede gescheiterte Voraussetzung Werfen ist übertrieben.

Eine nicht bestandene Voraussetzung sollte eine AssertException, oder etwas ähnliches werfen. Vor dem Aufruf einer Methode, muss sie die Voraussetzung halten. Wenn der Anrufer diese Prüfung nicht tun, es ist ein Fehler im Programm, oder eine falsche Verwendung der Verfahren (API).

Nur wenn nicht die Voraussetzungen erreichen wäre ein seltener außergewöhnliche Vorkommen.

Klingt wie eine nützliche Verwendung von Ausnahmen für mich. Es ermöglicht sicherlich mehr feinkörnige Protokollierung und Fehlersuche als nur eine allgemeine ‚Voraussetzung nicht bestanden‘, obwohl Sie auch eine einzelnen ‚Voraussetzungen nicht bestanden‘ Ausnahme haben könnten und setzen welche Voraussetzungen in die Ausnahmemeldung versagt haben.

Ich denke, es ist in Ordnung, eine andere Ausnahme für alle Ausnahmen zu erstellen, solange Sie über die Verwendung und Umgang mit ihnen planen.

Ich habe festgestellt, dass je besser die Fehler / Ausnahmebehandlung desto leichter ist es zu debuggen Software in den späteren Stadien ist.

Zum Beispiel: Wenn Sie eine generische excpeiton haben alle schlechten Eingang zu handhaben, dann müssen Sie alles betrachten, das in die Methode übergeben wurde, wenn ein Fehler auftritt. Wenn Sie eine excpetion aller Arten von schlechten Bedingungen haben, werden Sie wissen exaclty wo sie suchen müssen.

Es sieht mir möglich, aber wenn Sie auf diese Weise fortsetzen wollen mit Vorbedingungen zu tun, werden Sie mit N Ausnahmeklassen pro Klassenmethode enden. Sieht aus wie ein explosives Wachstum von ‚nicht funktional‘ Klassen.

Ich möchte Code immer, wo die ‚Kern‘ Funktionalität nicht Verletzung der Voraussetzungen Griff hatte (abgesehen von ihnen behaupten - eine große Hilfe). Dieser Code kann dann in einer ‚Voraussetzung Prüfung‘ eingewickelt wird, die nicht wirft Ausnahmen oder benachrichtigt Nichterfüllung sonst.

Als sehr sehr allgemein zu bestimmen, ob Sie jemals eine Klasse erstellen sollen oder nicht (und eine Ausnahme ist eine Klasse), sollten Sie ermitteln, ob ein Code ist, der diese Klasse einzigartig von allen anderen Klassen macht (in diesem Fall Ausnahmen).

Wenn nicht, würde ich nur die Zeichenfolge in der Ausnahme gesetzt und nenne ihn einen Tag. Wenn Sie Code in Ihrer Ausnahme ausgeführt werden (vielleicht ein allgemeiner Recovery-Mechanismus, der mehrere Situationen durch den Aufruf exception.resolve verarbeiten kann () oder etwas), dann könnte es nützlich sein.

Ich weiß, dass Ausnahmen nicht immer folgen dieser Regel, aber ich denke, dass mehr oder weniger ist, weil Ausnahmen von der Sprache zur Verfügung gestellt keine Business-Logik in ihnen haben können (weil sie das Geschäft nicht kennen - Bibliotheken immer sind in der Regel voll von Ausnahmen von den Regeln OO sein)

Ich denke, Ben am Ziel ist hier. Was ist der Sinn verschiedene Ausnahmen zu werfen, wenn Sie nicht, sie gehen zu fangen? Wenn Sie wirklich wollen, eine andere zu werfen, würde ich zumindest eine gemeinsame „PreconditionFailedException“ Basisklasse, die sie alle stammen aus und versuchen, sie in eine Art heirachy zu organisieren, so dass Sie Gruppen von ihnen zu fangen. Personlly, würde ich nicht verschiedene, und habe nur eine gemeinsame Ausnahme, die Sie mit den Details des Fehlers in jedem Wurf.

Nein, Sie sollten nicht eine spezifische Ausnahme für jede Voraussetzung schaffen, weil es gegen die Prinzipien der Design-by-Contract gehen wird.

Die Begleiterscheinungen der Umsetzung Voraussetzungen sind, dass sie Teil der Dokumentation sein sollten, und dass Sie die erforderlichen Methoden zur Verfügung stellen sollen der Anrufer zu prüfen, ob alle Voraussetzungen gültig sind. (Das heißt, wenn eine Methode Ausführung auf dem Status eines Objekt unter Berufung, wobei das Verfahren den Status überprüfen sollte den Anrufer zur Verfügung steht).

So sollte der Anrufer in der Lage sein zu überprüfen, ob alle Voraussetzungen vor dem Aufruf Ihre Methode erfüllt sind.

Die Implementierung spezifische Ausnahmen für jede verletzte Voraussetzung würde / könnte den Anrufer ermutigen, die Try / Catch-Muster um den Methodenaufruf zu verwenden, was im Widerspruch mit der Philosophie der Design-by-Contract.

Ich würde sagen, es ist in Ordnung, solange man sie nicht markiert Ausnahmen (Unterklasse von Runtime in Java) zu machen. Doch in Java ist es besser, nur Behauptungen zu verwenden.

Wenn Sie dies tun, stellen Sie sicher, dass sie alle von einer anderen gemeinsamen benutzerdefinierten Ausnahme erben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top