Das Angeben eines Ausnahmesuffixes für Ausnahmeklassen fühlt sich für mich wie ein Codegeruch an (redundante Informationen - der Rest des Namens impliziert einen Fehlerzustand und erbt von Exception). Es scheint jedoch auch, dass jeder es tut und es scheint eine gute Übung zu sein.
Ich möchte verstehen, warum dies eine gute Praxis ist.
Ich habe bereits die Frage gesehen und gelesen, warum Ausnahmen normalerweise die Suffix-Ausnahme im Klassennamen haben
Die Frage ist für PHP und während die Antworten wahrscheinlich für Java gültig sind. Gibt es noch andere Argumente oder ist es wirklich so einfach, sie explizit zu differenzieren?
Nehmen wir die Beispiele aus der vorherigen Frage: Könnte es in Java wirklich Klassen mit dem Namen geben FileNoFound
, der keine Ausnahme darstellt? Wenn es welche geben könnte, ist es dann angebracht, sie mit einem Suffix zu versehen Exception
?
Betrachtet man eine kurze Hierarchie in der Finsternis Exception
, so haben die allermeisten das Suffix der Ausnahme, aber es gibt ein paar Ausnahmen. javassist
ist ein Beispiel für eine Bibliothek, die bis auf wenige Ausnahmen ohne das Suffix zu haben scheint - zB BadByteCode
, BadHttpRequest
usw.
BouncyCastle
ist eine andere lib mit ausnahmen wie CompileError
Ich habe auch ein bisschen herumgegoogelt mit kleinen Infos zum Thema.
quelle
Exception
Suffix tragen , oder sollten wir Ausnahmen für Ausnahmeausnahmen machen?" ;)FileNotFound
ArrayIndexOutOfBounds
undOutOfMemory
sind mehr Beobachtungen / Beschreibungen, werden dann aber auf das Nomen angewendetException
.Antworten:
Landeis Antwort ist gut, aber es gibt auch die grammatikalische Antwort. Klassennamen sollten Substantive sein . Was ist ein "OutOfMemory"? Was ist ein "FileNotFound"? Wenn Sie sich "Exception" als Substantiv vorstellen, dann ist der Deskriptor das Adjektiv, das es spezifiziert. Es ist nicht irgendein
Exception
, es ist einFileNotFoundException
. Sie sollten nicht mehr fangen müssen,OutOfMemory
als Sie in den Laden gehen würden, um ein "Blau" zu kaufen.Dies zeigt sich auch, wenn Sie Ihren Code als Satz zu lesen: „
Try
tun ... undcatch OutOfMemory Exceptions
“quelle
OutOfMemory
Ausnahme bekommen" lautet besser als "Sie werden eineOutOfMemoryException
Ausnahme bekommen", nicht wahr?OutOfMemoryException
." Das heißt, wir haben auch PIN - Nummern und Geldautomaten, so eine OOME Ausnahme nicht wäre , dass ungewöhnlich.OutOfMemoryException
", wenn es einfach sein kann "Sie sind nicht mehr im Gedächtnis"? Wir verwenden Sie keineClass
Suffixe (DogClass
,CatClass
,XmlReaderClass
, ...).Ich denke, Ausnahmen (und Fehler und theoretisch andere
Throwable
) unterscheiden sich von Dingen wie Schnittstellen oder Aufzählungen (die normalerweise nicht als Suffix verwendet werden): Sie haben normalerweise einen sehr klaren und begrenzten Zweck, sie werden mit speziellen Sprachkonstrukten verwendet (try
,catch
,throw
,throws
) und folgen besondere Regeln (zB geprüft vs ungeprüften Ausnahmen, keine Generika). In gewisser Weise handelt es sich nicht nur um Klassen, die zufällig als Ausnahmen verwendet werden, sondern um einen Ausnahmemechanismus, der mithilfe von Klassen implementiert wird.Wenn Sie sich also mit einer Ausnahme befassen und diese nicht als solche erkennen, ist normalerweise etwas zutiefst falsch (was wiederum bei Dingen wie Aufzählungen oder Schnittstellen nicht der Fall ist). Ich denke, diese Unterschiede zu "normalen" Klassen sind groß genug, um einen visuellen Hinweis zu liefern.
quelle
Exception
in Java nichts geerbt wurde - in C # ist das nicht möglich. Wenn Sie dies nicht können, kann ich mir kein Szenario vorstellen, in dem Sie "eine Ausnahme behandeln und [nicht] als solche erkennen" würden.Throwable
in Java keine Non- s werfen . Sie können sich jedoch nicht nur mittry
-catch
-Einstellungen befassen, sondern auch mit Ausnahmen , wenn Sie eine Art Validierung für komplexe Objekte durchführen (wenn Sie alle damit zusammenhängenden Probleme kennen möchten , nicht nur die erste). In solchen Fällen sollten Sie sich bewusst sein, dass Sie z. B. die Dinge, die Sie in Ihrer Liste haben, erneut werfen können, so dass es schlecht wäre, sie zu nennen, dhValidationIssue
stattValidationException
.Ja, jeder tut es, also ist es eine Übung, aber ist es immer noch gut? Mehrere Personen stellen dies in Frage:
quelle