Ich könnte schwören, dass ich jemanden kenne, der jemanden kennt, der vor ein paar Jahren mit einem Wohnmobil durch die USA gereist ist. Horrorfilm-Fans prophezeien vielleicht schon ein grausiges Ende dieser Geschichte, aber keine Sorge – in diesem Artikel wird niemand verletzt. Sie können diese Geschichte Ihren Kindern weiter vorlesen (wie immer, oder?).
Die Touristen in ihrem Wohnmobil waren auf dem Weg nach Las Vegas und starteten südlich des Grand Canyon. Wenn Sie sich in der Gegend nicht auskennen, wissen Sie vielleicht nicht, dass es nicht möglich ist, den Grand Canyon mit dem Auto zu durchqueren, eine harte Grenze, die nicht verhandelbar ist.
Wenn es also darum geht, Ihre Route zu planen, sind Sie in der Wahl der Straßen, die Sie nehmen können, etwas eingeschränkt. Der große Fehler, den die Touristen gemacht haben, war, dass sie nicht berücksichtigt haben, dass sie aufgrund der Größe ihres Autos vielleicht nicht jede verfügbare Straße nutzen können.
So landeten sie schließlich vor einer Unterführung, durch die ihr Fahrzeug nicht hindurch passte. Sie mussten mehrere Stunden rückwärts fahren, um eine alternative Route zu finden, und verloren im Grunde einen ganzen Tag. In Anbetracht der Tatsache, dass sie auf dem Weg nach Las Vegas, dem „Spielplatz der Erwachsenen“, waren, hätte ihnen das vielleicht ein Vermögen erspart, oder es hätte sie ein Vermögen gekostet, wenn sie einen Vierteldollar in den Spielautomaten geworfen und den Jackpot gewonnen hätten. Man kann nie wissen.
In eine solche Situation zu geraten, ist nicht die Schuld der Unterführung: Der Fehler, der irgendwo flussaufwärts gemacht wurde, zeigt sich lediglich genau dann, wenn man sich der Unterführung nähert, und ist in der Regel schwierig (oder zumindest mühsam) zu beheben.
PHP als Programmiersprache, genau wie jede andere dynamische Sprache, mag auf den ersten Blick nicht allzu strenge Validierungen von Daten benötigen. Die Validierung von Daten ist jedoch direkt mit der Fehlerbehandlung verbunden: Wenn Daten ungültig sind, sollte dies ein Fehler oder eine Ausnahme sein (wenn Sie OOP-Code schreiben, was Sie tun sollten). Dieser Fehler muss irgendwo behandelt werden.
In den meisten Fällen bedeutet eine fehlgeschlagene Validierung, zumindest aus der Sicht der Geschäfts- oder Domänenlogik, dass der Anwendungsprogrammierer dem Code erlaubt hat, einen ungültigen Wert weiterzugeben. Da der Anwendungscode dies nicht hätte tun dürfen, fehlt der Anwendung wahrscheinlich Validierungscode. Der Hauptunterschied zwischen Anwendungscode und Domänenlogik bei der Durchführung von Validierungen besteht darin, dass der Anwendungscode in der Regel alle Datenfelder validiert und mehrere „Fehlermeldungen“ sammelt, während die Domänenlogik sofort bei der ersten fehlgeschlagenen Validierung eine Exception wirft.
Wann trat also der Fehler in dem oben beschriebenen Szenario auf? Der Fehler tauchte zur Laufzeit auf, als ein Benutzer ungültige Daten eingab. Tatsächlich wurde der Fehler aber schon viel früher gemacht, als der Entwickler den Validierungscode der Anwendung schrieb. Und wie bei allen Fehlern, die erst spät im Prozess entdeckt werden, ist die Fehlerbehandlung mühsam: Die einzige Möglichkeit, das beschriebene Problem zur Laufzeit zu behandeln, wäre, die Ausnahme in eine Art von „Bitte korrigieren Sie dieses Formularfeld“-Meldung zu übersetzen.
Diese Art der Betrachtung eines Laufzeitfehlers mag sich für Sie nicht natürlich anfühlen. Vielleicht liegt das daran, dass es im wirklichen Leben so üblich ist, sich mit Fehlern zu beschäftigen, lange nachdem sie aufgetreten sind. Lassen Sie uns zur Veranschaulichung eine ganz neue urbane Legende erfinden.
Stellen Sie sich vor, Sie sind LKW-Fahrer auf einer deutschen Autobahn und fahren stolz einen gigantischen 50-Tonnen-plus-Super-Truck. Sie erreichen bald Ihr Ziel (pünktlich, wie immer). Nicht allzu weit vor Ihnen sehen Sie eine wunderschöne Hängebrücke, die sich über ein weites Flusstal spannt. Sie sind gerade dabei, Pläne für das Abendessen zu machen, als Sie an einem Schild vorbeikommen, das Sie darüber informiert, dass auf der Brücke ein Gewichtslimit von 18 Tonnen für einzelne Fahrzeuge gilt. Moment, 18 Tonnen? Ihr Supertruck wiegt über 50 Tonnen. Bevor Sie auf die Bremse treten, lassen Sie uns die Szene einfrieren und einen Moment lang nachdenken.
Es ist gerade ein Problem aufgetreten, eine Folge eines Fehlers, der viel früher bei der Planung der Fahrt aufgetreten ist. Welche Möglichkeiten gibt es, diesen Fehler in diesem Moment zu behandeln?
Sie können weiterfahren und hoffen, dass die Brücke das Gewicht Ihres LKWs aushält. Wenn die Brücke einbricht, während Sie darüber fahren, werden Sie mit Sicherheit sterben und es wahrscheinlich Ihrer Familie überlassen, eine neue Brücke zu kaufen. Das klingt nicht nach einer guten Option. Die Brücke könnte halten, aber da urbane Legenden traditionell nie ein Happy End haben ... nun ja. Nehmen wir an, Sie haben bereits eine Polizeikontrolle direkt hinter der Brücke entdeckt. Selbst wenn Sie es schaffen, die Brücke zu überqueren, werden Sie Ihren Führerschein für immer verlieren, so dass ein Weiterfahren absolut nicht in Frage kommt.
Ihre einzige Möglichkeit ist jetzt, auf die Bremse zu treten und anzuhalten. Aber was nun? Sie befinden sich auf einer Autobahn, also können Sie nicht einfach umdrehen und zurückfahren. Das Rückwärtsfahren auf einer Autobahn ist aus gutem Grund gesetzlich verboten. Wollen Sie also Ihren Lkw direkt auf der Autobahn abladen oder gar demontieren? Sie könnten die Polizei bitten, den gesamten Verkehr anzuhalten und einen ganzen Abschnitt der Autobahn zu sperren, damit Sie rückwärts fahren können. Das ist zwar die einzige Möglichkeit, aber Sie werden sich auf dem Weg dorthin sicher nicht viele neue Freunde machen. Und Sie werden Ihren Chef wahrscheinlich mit einer enormen Rechnung zurücklassen, wenn die Polizei Ihnen ihre Auslagen in Rechnung stellt. Raten Sie mal, von welchem Gehalt diese Rechnung abgezogen werden wird!
Im wirklichen Leben besteht die einzige Möglichkeit, solche Situationen zu vermeiden, darin, bei der Planung einer Reise sehr, sehr vorsichtig zu sein (oder nirgendwohin zu fahren, was irgendwie problematisch ist, wenn man vom Fahren lebt). In der Software-Entwicklung ist es entscheidend, dass Sie alle Fehler behandeln, sobald sie auftreten. Dies setzt voraus, dass Sie tatsächlich erkennen, dass ein Fehler aufgetreten ist. Im obigen Beispiel wird an irgendeinem Punkt im Planungsprozess die Geschäftsregel „Die Straße muss das Fahrzeug tragen“ verletzt. Wenn diese Geschäftsregel nicht existiert, ist es sehr wahrscheinlich, dass Sie irgendwann in der Zukunft ernsthafte Probleme bekommen werden. Man könnte darüber streiten, ob eine verletzte Geschäftsregel tatsächlich ein Fehler ist – ich würde sagen, das ist sie nicht. Der eigentliche Fehler tritt auf, wenn es überhaupt keine Regel gibt.
Zusammenfassend lässt sich sagen, dass das Kennen und Dokumentieren aller Anforderungen und Restriktionen der Schlüssel zum Erfolg ist. Und die beste Dokumentation, die ich mir vorstellen kann, ist funktionierender Code, denn dieser macht nicht nur Ihre Spezifikation ausführbar, sondern garantiert auch, dass Ihre Dokumentation mit dem Code übereinstimmt und somit niemals lügt.