Ich habe über dieses Problem schon eine Weile nachgedacht und finde mich ständig mit Vorbehalten und Widersprüchen konfrontiert. Deshalb hoffe ich, dass jemand zu folgenden Schlussfolgerungen kommen kann:
Bevorzugen Sie Ausnahmen gegenüber Fehlercodes
Soweit mir bekannt ist, sollten Sie nach vierjähriger Tätigkeit in der Branche beim Lesen von Büchern, Blogs usw. Ausnahmen auslösen und keine Fehlercodes zurückgeben (nicht unbedingt ein Fehlercode, sondern ein Fehlercode) Typ, der einen Fehler darstellt).
Aber - mir scheint das zu widersprechen ...
Codierung auf Schnittstellen, keine Implementierungen
Wir codieren in Schnittstellen oder Abstraktionen, um die Kopplung zu verringern. Wir kennen oder wollen den spezifischen Typ und die Implementierung einer Schnittstelle nicht kennen. Wie können wir also möglicherweise wissen, nach welchen Ausnahmen wir suchen sollten? Die Implementierung kann 10 verschiedene Ausnahmen auslösen oder keine. Wenn wir eine Ausnahme feststellen, treffen wir sicherlich Annahmen über die Implementierung?
Es sei denn - die Schnittstelle hat ...
Ausnahmespezifikationen
In einigen Sprachen können Entwickler angeben, dass bestimmte Methoden bestimmte Ausnahmen auslösen (Java verwendet beispielsweise das throws
Schlüsselwort.) Aus Sicht des aufrufenden Codes scheint dies in Ordnung zu sein - wir wissen explizit, welche Ausnahmen möglicherweise abgefangen werden müssen.
Aber - das scheint darauf hinzudeuten ...
Undichte Abstraktion
Warum sollte eine Schnittstelle angeben, welche Ausnahmen ausgelöst werden können? Was ist, wenn die Implementierung keine Ausnahme oder andere Ausnahmen auslösen muss? Auf Schnittstellenebene ist es unmöglich zu wissen, welche Ausnahmen eine Implementierung auslösen möchte.
Damit...
Schlussfolgern
Warum werden Ausnahmen bevorzugt, wenn sie (in meinen Augen) den Best Practices für Software zu widersprechen scheinen? Und wenn die Fehlercodes so schlecht sind (und ich nicht unbedingt die Fehlercodes verkaufen muss), gibt es eine andere Alternative? Was ist der aktuelle (oder zukünftige) Stand der Technik für die Fehlerbehandlung, der die Anforderungen der oben beschriebenen Best Practices erfüllt, sich jedoch nicht auf den Aufruf von Code zur Überprüfung des Rückgabewerts von Fehlercodes stützt?