Letzte Woche hatten wir einen heftigen Streit über den Umgang mit Nullen in der Serviceschicht unserer Anwendung. Die Frage ist im .NET-Kontext, wird aber in Java und vielen anderen Technologien gleich sein.
Die Frage war: Sollten Sie immer nach Nullen suchen und sicherstellen, dass Ihr Code funktioniert, egal was passiert, oder eine Ausnahme auslösen, wenn eine Null unerwartet empfangen wird?
Auf der einen Seite ist das Prüfen auf null, wenn Sie es nicht erwarten (dh wenn Sie keine Benutzeroberfläche haben, um damit umzugehen), meiner Meinung nach dasselbe wie das Schreiben eines try-Blocks mit leerem catch. Sie verstecken nur einen Fehler. Der Fehler könnte sein, dass sich etwas im Code geändert hat und null nun ein erwarteter Wert ist, oder es liegt ein anderer Fehler vor und die falsche ID wird an die Methode übergeben.
Andererseits kann die Überprüfung auf Nullen im Allgemeinen eine gute Gewohnheit sein. Darüber hinaus funktioniert die Anwendung bei einer Überprüfung möglicherweise weiterhin, wobei nur ein kleiner Teil der Funktionalität keine Auswirkung hat. Dann könnte der Kunde einen kleinen Fehler wie "Kommentar kann nicht gelöscht werden" melden, anstatt einen viel schwerwiegenderen Fehler wie "Seite X kann nicht geöffnet werden".
Welcher Praxis folgen Sie und was sind Ihre Argumente für oder gegen einen der beiden Ansätze?
Aktualisieren:
Ich möchte einige Details zu unserem speziellen Fall hinzufügen. Wir haben einige Objekte aus der Datenbank abgerufen und sie bearbeitet (z. B. eine Sammlung erstellen). Der Entwickler, der den Code geschrieben hat, hat nicht damit gerechnet, dass das Objekt null sein könnte, sodass er keine Überprüfungen vorgenommen hat. Beim Laden der Seite ist ein Fehler aufgetreten, und die gesamte Seite wurde nicht geladen.
In diesem Fall hätte natürlich eine Überprüfung durchgeführt werden müssen. Dann haben wir uns darüber gestritten, ob jedes Objekt, das verarbeitet wird, überprüft werden soll, auch wenn nicht erwartet wird, dass es fehlt, und ob die eventuelle Verarbeitung im Hintergrund abgebrochen werden soll.
Der hypothetische Vorteil wäre, dass die Seite weiterhin funktioniert. Überlegen Sie sich Suchergebnisse zu Stack Exchange in verschiedenen Gruppen (Benutzer, Kommentare, Fragen). Die Methode könnte nach null suchen und die Verarbeitung von Benutzern abbrechen (was aufgrund eines Fehlers null ist), aber die Abschnitte "Kommentare" und "Fragen" zurückgeben. Die Seite würde weiterhin funktionieren, außer dass der Abschnitt "Benutzer" fehlen wird (was ein Fehler ist). Sollten wir früh scheitern und die ganze Seite brechen oder weiterarbeiten und darauf warten, dass jemand merkt, dass der Abschnitt "Benutzer" fehlt?
assert(foo != null, "foo is web control within the repeater, there's no reason to expect it to be null, etc, etc...");