dedlfix: Begriff erklären

Beitrag lesen

Tach!

Ergänzung: Statisches Verhalten anhand von Codebeispielen

Kann man so machen, geht aber auch anders, besonders wenn man das Single Responsibility Principle als erstrebenswert ansieht. Die Einheiten sollten nur ihre Aufgabe tun und nicht noch Verwaltungskram drumherum berücksichtigen. Das erhöht nur ihre Komplexität.

Da werden also Klassenvariablen gesetzt, die das Verhalten während der Anwendung beeinflussen.

Und sämtliche Instanzen der Klasse müssen sich nach diesen (klassen)globalen Werten richten. Wenn man mehrere Instanzen hat, die sich diesbezüglich unterschiedlich verhalten sollen, verwaltet man zu Fuß diese globalen Werte, je nachdem mit welcher Instanz man gerade arbeitet.

So soll z.B: eine Exception mit Backtrace geworfen werden, wenn falsche Argumente übergeben werden und die Instanz aufgrund eines ungültigen Datums nicht erstellt werden konnte.

Ob Exceptions geworfen werden sollen, muss die Klasse nicht selbst wissen. Es reicht, dass sie eine Exception wirft, wenn sie ein Problem hat. Ob der Verwender darauf reagieren möchte oder nicht, kann er selbst festlegen, indem er einen try-catch-Block nach seinen Wünschen definiert.

Das ist insbesondere beim Entwickeln wichtig, denn der Backtrace zeigt die Zeile wo's geknallt hat.

Die Informationen zur problematischen Stelle ist sowieso on der Exception enthalten. Das ist also kein Vorteil, wenn man das Werfen der Exception schaltbar macht.

Dasselbe kann man natürlich auch in PHP machen:

Scaliger5::$EXCEPTION = 1;
Scaliger5::$VALIDATE = 1;
$sca = new Scaliger5(5,10,1582);

Ob validiert werden soll oder nicht, ist auch besser so gelöst, dass die Validierung eine separate Methode ist, die man aufrufen kann oder auch nicht. Das muss auch nicht global für alle Instanzen gesteuert werden.

Und auch den Fehler über eine statische Variable (Klassenvariable) abfragen:

Wozu, wenn der Text bereits in der Exception enthalten ist, oder im Rückgabewert der Validierungsmethode stehen kann? Hat man in separat als Eigenschaft der Instanz, muss man auch immer dafür sorgen, dass er nach der Verwendung wieder gelöscht wird, damit er bei der nächsten Verwendung keinen gar nicht aufgetretenen Fehler signalisiert.

Wofür das Werfen einer etwaigen Exception unterdrückt wurde. Letzteres bietet sich dann an wenn Benutzereingaben vorliegen und z.B. ein ungültiges Datum eingegeben wurde.

Bekommt man hin, indem man isValid() oder validate() anbietet. Kein Grund, das global zu steuern.

So gibt es keinen Backtrace un der Anwender bekommt nur die Fehlermeldung die schon in der Klasse fix und fertig ausformuliert ist. Hier könnte man sich auch über die Mehrsprachigkeit kümmern.

Was der Verwender braucht, sollte der Verwender entscheiden können. Die Datumsberechnungsklasse muss von der Umgebung nichts wissen, in der sie läuft, und auch nicht dementsprechend formatierte Ausgaben erzeugen.

Das wäre also eine Anwendung von Klassenvariablen die sich grundsätzlich immer statisch verhalten.

Da gibt es bessere Einsatzgebiete.

dedlfix.