MichiLee: Wie am besten Fehlermeldungen handlen

Beitrag lesen

Hi,

Du kannst dir natürlich auch deine eigene Exception so erweitern, dass du in der Exception die relevanten Daten der gefangenen Exception nochmal kopiert weiterreichst. Allerdings wäre das ein unguter Verstoß gegen das Prinzip der "Separation of Concern". Deine Model-Klasse interessiert es wenig, dass deiner Querybuildingklasse der Datenbanktreiber verloren gegangen ist und der Query deshalb scheiterte. Ebenso interessiert es den Controller nicht, welches Datenbankproblem nun genau zum Scheitern des Model-Ladens geführt hat. Das Model-Object konnte nicht in den Speicher befördert werden - das ist das Entscheidende. Nicht alle Models kommen aus einer Datenbank, deshalb interessiert der Datenbankfehler nur die Entwickler zum Bugfixing.

Das ist interessant und hört sich sehr sinnvoll an (Es könnte ja später anstatt einer Datenbank ein XML-File sein und man sollte Models und Views ja unabhängig programmieren können). Wie sollte dann die Model-Klasse hantieren, wenn es sie wenig interessiert, dass der Datenbanktreiber verlorren gegangen ist? D.h., er kriegt die Exception dass der Datenbanktreiber verloren gegangen ist, was macht er dann am besten danach? Was teilt er dem Controller dann mit, wie wird es grob gehandhabt, der Fehler besteht ja.

Noch eine Kleinigkeit noch, bzw. des Verständnises, wenn man Exceptions umher wirft :-)

Die Datasourceklasse wirft eine DatasourceException

try {
Baue Verbindung zur Datenbank
} catch (Exception e) {
throw new DataSourceException ("Meine Message");

Die Querybuilder hat nun in etwa zwei solche Methoden:

public Resultdata QueryBuildAndRun (String query, boolean b) throws DatasourceException {

try {
Die Query wird durch aufruf der Datasourceklasse ausgeführt, wo Fehler auftreten können
} catch (Exception e) {
Hier kann ich vermutlich mit e.getMessage() die Message erhalten, obwohl ich nicht nach DatasourceException prüfe, sondern nach Exception

return Resultdata
}

Nun komme ich zu meiner eigentlichen Frage

Ich habe nun eine überladene Klasse, die die Methode QueryBuildAndRun aufführt, aber kein boolean-Wert erhält:

public Resultdata QueryBuildAndRun (String a) throws DataSourceException {

Diese Methode ruft folgende Methode von oben auf:
QueryBuildAndRun (a, false);
}

Muss ich nun in der unteren Klassen eigentlich die Methode QueryBuildAndRun (a, false); auch in ein Try-Catch-Block rein, da die oberen Methode,die aufgerufen wird, ja einen Fehler werfen kann?

Grüße