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.
Characteristisch für SRP (Single-Responsibility-Prinzip) ist, die Methoden der Helper zu Methoden der eigenen Instanz zu machen. Wie ich weiter oben schon darlegte, ist $this->CGI
- ein Helper
- ein aggregiertes Objekt
- eine Instanz einer anderen, nicht verwandten Klasse
und das bedeutet, daß diese Instanz mit Methoden seiner, also einer anderen Klasse daherkommt. Diese Methoden werden zu eigenen Methoden indem sie delegiert werden.
Analog verfährt SRP mit den Eigenschaften. Der Aufruf einer delegierten Methode $this->param()
hat zur Folge, das Formulareingaben zunächst im aggregierten Objekt $this->CGI
gespeichert werden. Natürlich muß, um diese Daten, SRP folgend, in die eigene Eigenschaft $this->STASH
zu bekommen ein weiterer Transfer stattfinden der ganz einfach nur die Methoden oder allg. die dafür zuständige Schnittstelle nutzt die das aggregierte Objekt hierzu bereitstellt.
Idealerweise sind die Namen der in $this->STASH
für die TE bereitgestellten Platzhalter dieselben wie sie als name=
Attribut im Formular vergeben wurden. In PHP würde es vollkommen ausreichen, das GET- oder POST-Array in eine Eigenschaft der eigenen Instanz zu kopieren um SRP Genüge zu tun. MfG