Hallo zusammen,
ich arbeite mich gerade in Design-Pattern ein und bin jetzt auch noch mal auf das Thema Exceptions gestoßen was ich lange Zeit gemieden habe weil mir der Nutzen nicht ganz klar war.
Nun muss natürlich was dran sein wenn es anerkannter Maßen als guter Stil gilt Exceptionhandlung statt IF/ELSE Konstrukte zu nutzen.
Also der Aufbau mit Try/Catch Blöcken und dem Werfen von Exceptions habe ich verstanden und ist auch zu genüge im Internet dokumentiert. Auch das Exceptions wie der Name schon sagt nur im Ausnahmefall geworfen werden sollten ist auch klar und nicht etwa um true/false in normalen Bedingungen zu behandeln.
Jetzt aber geht es um den nutzen.
Nehmen wir mal ein einfaches Beispiel ein Query über eine Methode einer MySQL Klasse:
Fehlerbehandlung mit Exceptions
Fehlerbehandlung mit IF/ELSE
Wie man sieht ist die IF/ELSE Methode (noch) übersichtlicher und mit weniger Code verbunden. Wieso sollte man hier trotzdem zu Exception-Lösung greifen?
Oder würdet Ihr das nur bei komplexeren Methoden machen wo viele mögliche Fehlerbehandlungen via IF/ELSE Verzweigungen sehr unübersichtlich werden könnten? Weil der nächste Vorteil die Exception Klasse erweitern zu können um so auf jeden Fehler individuell reagieren zu können habe ich natürlich bei IF/ELSE genauso.
Für mich gibt sich deshalb bis jetzt nur der, bei vielen abzufangenden Fehlern, besser zu überblickende Code. Einen sonstigen richtigen Mehrwert sehe ich noch nicht.
Eine andere Frage die ich noch hätte wäre wo man dann den Try/Catch Block aufführt in der Klasse/Methode selber wie oben im Beispiel?
Oder im Programmcode den Aufruf der Methode in Try/Catch packen?
Dann müsste ich mich darauf verlassen das die Methode immer in einem Try/Catch Blöck steht da sonst die geworfene Exception nicht behandelt wird und zu einem Scriptabbruch führt.
Aber normal sollte jeder die Klasse benutzen können ohne genau zu wissen was genau im Code gemacht wird ... also könnte auch unbekannt sein ob eine Exception geworfen wird.
Würde mich um konstruktives Feedback sehr freuen
(Und ja ich habe Google und sonstige Suchen benutzt und mir sehr viele Beiträge zu diesem Thema angesehen)
Vielen Dank!
ich arbeite mich gerade in Design-Pattern ein und bin jetzt auch noch mal auf das Thema Exceptions gestoßen was ich lange Zeit gemieden habe weil mir der Nutzen nicht ganz klar war.
Nun muss natürlich was dran sein wenn es anerkannter Maßen als guter Stil gilt Exceptionhandlung statt IF/ELSE Konstrukte zu nutzen.
Also der Aufbau mit Try/Catch Blöcken und dem Werfen von Exceptions habe ich verstanden und ist auch zu genüge im Internet dokumentiert. Auch das Exceptions wie der Name schon sagt nur im Ausnahmefall geworfen werden sollten ist auch klar und nicht etwa um true/false in normalen Bedingungen zu behandeln.
Jetzt aber geht es um den nutzen.
Nehmen wir mal ein einfaches Beispiel ein Query über eine Methode einer MySQL Klasse:
Fehlerbehandlung mit Exceptions
PHP-Code:
public function doQuery($query)
{
try
{
$this->_result = mysql_query($query, $this->_connection);
if(!$this->result)
{
throw new Exeption('Fehler im SQL-Query');
}
}
catch(Exception $e)
{
echo $e->getMessage();
// Sonstige Fehlerbehandlung
}
}
PHP-Code:
public function doQuery($query)
{
$this->_result = mysql_query($query, $this->_connection);
if(!$this->result)
{
echo('Fehler im SQL-Query');
// Sonstige Fehlerbehandlung
}
}
Oder würdet Ihr das nur bei komplexeren Methoden machen wo viele mögliche Fehlerbehandlungen via IF/ELSE Verzweigungen sehr unübersichtlich werden könnten? Weil der nächste Vorteil die Exception Klasse erweitern zu können um so auf jeden Fehler individuell reagieren zu können habe ich natürlich bei IF/ELSE genauso.
Für mich gibt sich deshalb bis jetzt nur der, bei vielen abzufangenden Fehlern, besser zu überblickende Code. Einen sonstigen richtigen Mehrwert sehe ich noch nicht.
Eine andere Frage die ich noch hätte wäre wo man dann den Try/Catch Block aufführt in der Klasse/Methode selber wie oben im Beispiel?
Oder im Programmcode den Aufruf der Methode in Try/Catch packen?
Dann müsste ich mich darauf verlassen das die Methode immer in einem Try/Catch Blöck steht da sonst die geworfene Exception nicht behandelt wird und zu einem Scriptabbruch führt.
Aber normal sollte jeder die Klasse benutzen können ohne genau zu wissen was genau im Code gemacht wird ... also könnte auch unbekannt sein ob eine Exception geworfen wird.
Würde mich um konstruktives Feedback sehr freuen
(Und ja ich habe Google und sonstige Suchen benutzt und mir sehr viele Beiträge zu diesem Thema angesehen)
Vielen Dank!
Kommentar