Frage

Gibt es Situationen, in denen Sie Behauptung statt Ausnahmen-Handling innerhalb Domain-Klassen verwenden würde ...

War es hilfreich?

Lösung

Mit Ausnahmen für Parametervalidierung und andere Kontrollen, die sicherstellen, dass die Nutzer von Klassen verwenden sie wie beabsichtigt.

Mit Assertions für interne Konsistenzprüfungen, das heißt, um anzuzeigen, Sie vermasselt, nicht der Benutzer Ihrer Klasse.

Wenn also Nutzer Ihrer Klasse einen Assertionsfehler sehen, wissen sie es (wahrscheinlich) ein interner Fehler im Code, nicht in ihrer Verwendung des Codes. Auf der anderen Seite, wenn die Parametervalidierung Ausnahme erhalten, wissen sie, es ist ihre Schuld.

Andere Tipps

Nie. Assertions sind keine gültige Form der Fehlerbehandlung. Verwenden Sie sie bei der Identifizierung von Programmfehlern während des Tests zu unterstützen.

Eine Behauptung spiegelt einen Zustand, der nicht immer auftreten soll und war nicht zu erwarten, wo die Anwendung kann die Ausführung für einen oder anderen Grund nicht fortgesetzt werden, während eine Ausnahme einen Zustand anzeigt, die nicht „normal“ angesehen wird, aber das war nicht unerwartet, und von dem es könnte möglich sein, sich zu erholen.

Als Beispiel, wenn ich zuteilen Platz auf dem Heap, und diese Zuordnung fehlschlägt, dann kann ich nicht weiterarbeiten, so behaupte ich, dass die Adresse zurückgegeben gültig ist; wo es ungültig ist, die Behauptung fehlschlägt, und das Programm nicht mit ihm.

Auf der anderen Seite, wenn ich eine Datei zum Lesen öffnen, und es existiert nicht, dann könnte es möglich sein, aus der Situation zu erholen, wobei in diesem Fall eine Ausnahme ausgelöst wird (und gefangen, und so weit behandelt wie möglich).

Im allgemeinen Behauptungen sind sehr nützlich bei der Fehlersuche Phase, während Ausnahmen Teil der regulären Programmablaufes und Fehlerbehandlung in Betracht gezogen werden. Der allgemeine Konsens ist, dass Behauptungen im Produktionscode deaktiviert werden sollen (auf Schild Benutzer offensichtlich abstürzt), während ich eine Schule des Denkens gelesen habe, dass dies kontraproduktiv argumentiert, und dass der Benutzer die Assertionsfehler sehen soll, so dass sie richtig berichten kann das Problem.

Persönlich manchmal, ich die beiden Techniken kombinieren; in der Regel, wenn ich eine Ausnahme bin zu kontrollieren, dass ich glaube nicht geworfen werden kann. das obige Beispiel nehmen, wenn ich die Akte der Existenz, bevor Sie überprüfe, um sie zu öffnen, dann geworfen ich keine Ausnahme erwarten ist, und wenn man dann neige ich damit umgehen, indem eine Behauptung in dem entsprechenden catch-Block zu erhöhen. Ich finde dies eine besonders nützliche Technik in Java, in denen solche Ausnahmen vollständig geprüft werden.

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