Tach!
Hab da ein Objekt. Dieses Objekt verwaltet einen Datensatz. Es gibt bei diesem Objekt unter anderem eine Methode "delete". Diese Löscht den Datensatz in der Datenbank. Die Methode braucht zwingend den Tabellenname. Es gibt 3 "Fehlerfälle":
- Tabellenname ist nicht bekannt -> Exception
Das sollte schon vorher auffallen, wenn eine solch wichtige Abhängigkeit nicht gegeben ist.
- Es gibt keinen Primärschlüssel -> return false (Löschen war also nicht erfolgreich)
Braucht es im Prinzip auch nicht, man kann auch mit anderen Bedingungen Datensätze löschen. (Ich kenne aber deinen Anwendungsfall nicht. Gegebenenfalls ist auch der Primärschlüssel eine grundlegende Abhängigkeit.)
- Datensatz wurde bereits gelöscht -> return true (Löschen war bereits erfolgreich)
Hier kann man argumentieren: Der Datensatz ist weg, Ziel erfüllt, keine Ausnahmebedingung (oder: Aktion erfolgreich, betroffene Datensätze: 0). Aber auch hier muss man wieder fragen, was genau der Anwendungsfall ist und warum es wichtig wäre, auf bereits gelöschte oder nie vorhandene Daten zu reagieren (und ob das eine Ausnahmesituation ist und nicht anhand der Anzahl betroffener Datensätze erkannt werden kann).
Ich streite gerade mit mir selbst wieso ich nicht bei 1,2 und 3 einfach Exceptions werfe. Da ist eine kleine Stimme und die sagt dass alles was die Methode nicht mit Erfolg beendet, sprich das die Methode ihre Arbeit erledigt, mit einer Exception quittiert werden sollte. Die etwas lautere Stimme sagt, dass nur eine Exception geworfen werden sollte, wenn es "Technisch" unmöglich ist, dass die Methode ausgeführt wird, was eben nur dann eintritt, wenn der Tabellenname nicht bekannt ist.
Gibt es vielleicht irgendeine Regel wann man Exceptions werfen sollte?
In Ausnahmesituationen.
"Nicht mit Erfolg beendet" sich zum Beispiel auch eine Funktion, die eine Teilstring in einem String nicht findet. Ist das eine Ausnahme oder eine normale "is nich"-Situation. Oft wird es keine Ausnahme sein, manchmal schon.
dedlfix.