Rolf B: per Interace Datentyp definieren möglich?

Beitrag lesen

Hallo pl,

die englische Wikipedia formuliert es etwas direkter:

In computer science, a mutator method is a method used to control changes to a variable. They are also widely known as setter methods.

Nicht jede Methode, die einen Parameter bekommt und daraufhin was am Zustand des Objekts verändert, ist ein Setter.

$this->control() ist schon mal gar keiner, weil dieser Methode ein wesentliches Element eines Setters fehlt: der Parameter mit dem Wert, der in einer Eigenschaft des Objekts zu speichern ist.

Schlüsselbegriff ist: "control changes". Kontrolle bedeutet: Validierung von Werten, und Benachrichtigung interessierter Beobachter. Von meiner Erwartung her ist auch der Singular ein wesentliches Element der Definition: "a variable", nicht "variables of an object".

Dass der Aufruf eines Setters Auswirkungen auf andere Properties haben kann, spricht da nicht gegen. Dein Beispiel eines Date-Objekts ist ideal dafür. De facto speichert dieses Objekt einen Zeitpunkt und Properties wie Tag, Wochentag oder julianisches Datum sind Sichten auf diesen Zeitpunkt. Ob das Objekt die Werte dieser Sichten intern cached oder den Wert bei jedem Aufruf berechnet, ist ein Implementierungsdetail. Fachlich repräsentiert das Date-Objekt genau einen Wert: ein bestimmtes Datum (oder Timestamp, je nach Implementierung). Wenn diese Sichten-Properties Setter haben, wird nicht das Property geändert, sondern der gespeicherte Zeitpunkt. Und es gibt einige interessierte Beobachter, z.B. wenn ich das julianische Datum schreibe, sind die Properties Tag, Monat und Jahr brennend an diesem Update interessiert.

$this->control() und $this->browse() sind demnach ganz normale Methode, die dem Objekt den Auftrag geben, die Benutzereingabe zu übernehmen oder die Eingabeseite aufzubereiten. Das werden sie mit Hilfe eines Schwarms von Helper-Objekten tun, und es geht über einen Setter weit hinaus.

Eine Methode $this->acceptFormData($formData), die einen Satz Formulareingaben entgegennimmt und im Objekt speichert, würde ich demnach auch nicht als setter verstehen. Es ist ein Helper, der einen Datensatz ins Objekt übernimmt. Im Sinne von SRP wird dieser Helper nicht mehr tun, als diesen Ablauf zu orchestrieren, und dabei etliche Setter aufrufen, die nicht mehr tun, als die Werte zu speichern und ggf. ein ModelChanged-Event zu feuern.

Rolf

--
Dosen sind silbern