ich habe zahlreiche benutzerdefinierte Exceptions eingerichtet und stehe jetzt vor der Frage, auf welcher Ebene ich diese am besten abfange. Die verursachende Methode wird u. u. von mehreren Methoden auf bis zu vier Ebenen aufgerufen. Ich könnte die Exception entweder auf der Ebene der Entstehung durch TryCatch-Blöcke abfangen, oder jeweils eine Etage höher werfen. Meine (vielleicht etwas naive) Frage: gibt es prinzipielle Argumente dafür, die Fehlerbehandlung eher auf höherer oder eher auf niedrigerer Ebene durchzuführen oder kann man das so nicht entscheiden, da es vom konkreten Kontext abhängig ist? …
Exceptions immer da behandeln wo es möglich ist, ansonsten die Funktion mit einem Fehler blockieren oder das Programm abstürzen lassen (Fail fast).
(Ein anderer Ansatz ist die Verantwortlichkeit: Aus Sicht der Methode fragen: “Hab ich das verbockt?” “Ja”->behandeln “Nein”-Hochwerfen)
Pro Abstraktionsebene einen Exceptiontyp (ggf mehrere, bei verschiedenen Fehlerklassen), falls nötigt per try-catch in neue Exception verpacken (wenn Schichten durchbrochen werden).
Ist das nicht auch immer 'ne Frage, ob man in seiner Methode ungeprüfte Parameter an Untermethoden weitergibt oder nicht? Wenn ich Parameter vorher auf Gültigkeit prüfe, werfe ich eine Exception, wenn sie ungültig sind. Wenn sie gültig sind und Untermethoden trotzdem noch eine werfen, liegt das nicht mehr in meiner Verantwortung. IOExceptions und Streams sind dafür gute Beispiele. Das was man innerhalb seiner Methoden selbs verbockt, sollte man schon während der Entwicklung behandeln und zwar so, dass man entsprechende Exceptions nicht mehr bekommt (z.B. ausschliesslich gültige Parameter übergeben).
Ich hab das bisher immer so gehandhabt, dass ich mich frage auf welcher Ebene das Problem gelöst werden kann/muss und hab die Exception entsprechend weitergegeben.
Nicht behandelbare Fehler gebe ich für gewöhnlich nicht weiter, da die meistens aus Fehlern der aktuellen Ebene kommen.
Die Frage ist aber auch oft ob man überhaupt über Exceptions geht oder bestimmte Rückgabe Werte nutzt. Die Diskussion gab es aber ja schon öfters hier…
Danke euch schonmal für eure Diskussionsbeiträge. Die bringen mir wie immer Aspekte ins Bewusstsein, die ich bei meinen Gedankengängen bisher nicht berücksichtigt habe! Merci