Strukturfrage: Wann Exceptions verarbeiten?

Moltar

Mitglied
Hallo,

ich habe ein komplexeres Programm, in dem logischerweise auch Fehler auftreten können.

Ein Beispiel:
Der Benutzer klickt im Login-Formular auf den Button "Login". Daraufhin folgen eine Reihe von Funktionsaufrufen:

Der Button ruft die Login-Funktion des Frames auf.
Der Frame die Login-Funktion des Client.
Client -> Server
Server -> Datenbankschnittstelle
Datenbankschnittstelle -> Datenbank

Tritt nun ein Fehler in der Datenbank auf (Beispielsweise, weil die Tabelle, in der die Login-Daten stehen sollten, gelöscht wurde), dann entsteht dort eine Exception.

Nun meine Frage: Ist es sinnvoll, diese Exception durch die ganze Funktionskette bis hin zum Buttonklick durchzureichen? Oder sollte ich sie an einer (welcher?) Stelle vorher abfangen und verarbeiten?

Mein Problem bei der Lösung 'vorher abfangen' ist, dass ich ja nicht weiß, ob die aufrufende Funktion nicht noch mehr macht als nur diese Funktion aufzurufen. Damit bräuchte ich die Exception ja aber bis zum Buttonklick, damit der keine weiteren Aktionen ausführt. Oder sollte ich da einen entsprechenden Wert zurückgeben (z.b. boolean)?

Ich habe jedoch auch Funktionen, die einen Rückgabewert haben. Müsste ich da dann die Exception später abfangen? Oder null zurückgeben? Und was wäre dann, wenn auch im Erfolgsfall null zurückkommen könnte?

Fragen über Fragen ... aber ich wollte mein Programm gerne sinnvoll strukturieren.

Hoffe, ihr könnt mir helfen.

Grüße
Moltar
 
[..]

Nun meine Frage: Ist es sinnvoll, diese Exception durch die ganze Funktionskette bis hin zum Buttonklick durchzureichen? Oder sollte ich sie an einer (welcher?) Stelle vorher abfangen und verarbeiten?

[..]

Generell solltest Du so wenig durchreichen wie möglich, sondern die Exceptions in der Methode abfangen, in der sie auftreten. Das Durchreichen ist allerdings mit recht wenig Aufwand machbar. Du deklarierst eine Methode einfach mit "throws XYZException" und fertig. Wenn Du das zu intensiv betreibst wächst allerdings der Aufwand auf "höherem Level" die möglichen Exceptions abzufangen. D.h. jede Methode, die auf die throws-Methoden zurückgreift, muss wieder eine eigene Fehlerbehandlung mitbringen. Das sparst Du Dir, wenn das gleich in der auslösenden Methode geschieht. Faustregel beim Methoden-Entwurf: Reich nur Exceptions weiter, die Du absolut nicht behandeln kannst. Einen nicht möglichen Login kannst Du zum Beispiel auch mit einem bestimmten Rückgabewert anzeigen.


[..]

Ich habe jedoch auch Funktionen, die einen Rückgabewert haben. Müsste ich da dann die Exception später abfangen? Oder null zurückgeben? Und was wäre dann, wenn auch im Erfolgsfall null zurückkommen könnte?

[..]

Wenn eine Exception geworfen wird, bricht die Methode direkt ab. D.h. es kommt keine nachstehende Anweisung mehr zur Ausführung. Methoden geben also gar nichts zurück. Die Ausführung springt direkt in den zuständigen Try-Block. Eventuell nicht belegte Variablen musst Du dann an dieser Stelle nachbelegen.

Ich hoffe das gibt Dir erstmal einen groben Anhalt weiterzumachen.

Grüße
INTER
 
Hallo,

also ich würde für die UI einen zentralen ExceptionHandler registrieren.
Dieser verfügt über entsprechende ExceptionHandling Strategien und rendert Exceptions in entsprechender Form (internationalisiert), so dass sie in einer hübschen Fehlermeldungsbox (optional mit Stacktrace) angezeigt werden können. (Das geht wunderbar mit AOP / AspectJ)

Ansonsten schau mal hier:
http://www.tutorials.de/forum/java/268698-programmierstil-exceptions.html

Gruß Tom
 
Zurück