OOP: Designentscheidung für Factory-Pattern
Sven Rautenberg
- php
0 Cheatah
Moin!
Für den Lerneffekt wurschtel ich mich gerade durch UnitTests (gefunden und angewandt: SimpleTest).
Um (nach dem Durcharbeiten des SimpleTest-Tutorials) was Eigenständiges zu programmieren, dachte ich an einen Formmailer (die 1325ste Edition).
Ich habe im Moment: Eine Klasse, die ein Formularfeld abbildet. Die Methoden getName(), getValue() und isValid() geben Feldnamen, Feldwert und Validitätscheck (Pflichtfeld, numerisch, Mailadresse,... - Implementierung derzeit: "return true") zurück.
Außerdem habe ich eine Klasse, die eine Factory implementiert.
Meine Frage wäre jetzt: Was ist schlau? Die Factory kriegt $_POST übergeben und damit irgendwas machen. Was sollte man sich zurückgeben lassen?
Derzeit kriege ich ein Array von Formularfeldobjekten zurück.
Wäre es schlauer, sich ein Formularobjekt mit Methoden zum Zugriff auf die Formularfelder, die intern gespeichert werden, zurückgeben zu lassen?
Oder sollte man die Factory kapseln und das Array zurückgeben lassen, welches sich innerhalb einer Formularklasse befindet?
Ich denke, ich habe hier etwas Erörterungsbedarf über Vor- und Nachteile der diversen Vorgehensweisen. Dass am Ende doch alles davon abhängt, was der Formmailer denn konkret machen soll, ist mir klar. Das ist aber derzeit noch eher unbestimmt - wie gesagt: Lerneffekt. :)
- Sven Rautenberg
Hi,
Meine Frage wäre jetzt: Was ist schlau? Die Factory kriegt $_POST übergeben und damit irgendwas machen. Was sollte man sich zurückgeben lassen?
ein Objekt, das ein bestimmtes Interface implementiert (oder zumindest von einer bestimmten (abstrakten?) Klasse abgeleitet ist). Dies bezieht sich explizit auch auf Typsicherheit, die in PHP natürlich nicht existiert - aber z.B. durch Deine Factory-Methode gewährleistet werden kann.
Oder sollte man die Factory kapseln und das Array zurückgeben lassen, welches sich innerhalb einer Formularklasse befindet?
Die Factory fabriziert etwas. Dieses Etwas entspricht einem Schema (s.o.), ist aber im Kontext individuell. Wenn Du ein Array für sinnvoll hältst, so lass dessen Inhalte (typsicher) einer bestimmten Klasse(nfamilie) angehören.
Ich denke, ich habe hier etwas Erörterungsbedarf über Vor- und Nachteile der diversen Vorgehensweisen. Dass am Ende doch alles davon abhängt, was der Formmailer denn konkret machen soll, ist mir klar. Das ist aber derzeit noch eher unbestimmt - wie gesagt: Lerneffekt. :)
Das Factory-Pattern hat den Vorteil, etwas zu liefern, dessen Eigenschaften Du kennst, aber Flexibilität in der Implementierung zu ermöglichen. Wie wäre es, wenn Du eine Liste von FormElementControl-Objekten zurück liefern lässt, die sich z.B. in CheckboxFormElementControl, TextFormElementControl und SelectFormElementControl ausprägen?
Cheatah
Moin!
Oder sollte man die Factory kapseln und das Array zurückgeben lassen, welches sich innerhalb einer Formularklasse befindet?
Die Factory fabriziert etwas. Dieses Etwas entspricht einem Schema (s.o.), ist aber im Kontext individuell. Wenn Du ein Array für sinnvoll hältst, so lass dessen Inhalte (typsicher) einer bestimmten Klasse(nfamilie) angehören.
Die Typsicherheit sollte sich durch passende UnitTests gewährleisten. Im tatsächlichen Betrieb dann natürlich nicht, aber das halte ich für weniger relevant.
Das Factory-Pattern hat den Vorteil, etwas zu liefern, dessen Eigenschaften Du kennst, aber Flexibilität in der Implementierung zu ermöglichen. Wie wäre es, wenn Du eine Liste von FormElementControl-Objekten zurück liefern lässt, die sich z.B. in CheckboxFormElementControl, TextFormElementControl und SelectFormElementControl ausprägen?
Ich bastele (jedenfalls im Moment) nur etwas, was Formulare auswerten soll, nicht sie herstellen. Aber dein Gedanke war hilfreich, die Factory variabel unterschiedliche Objektklassen mit gleichem Interface zurückgeben zu lassen. In dieser Hinsicht arbeite ich mal weiter.
- Sven Rautenberg
Hi,
Die Typsicherheit sollte sich durch passende UnitTests gewährleisten. Im tatsächlichen Betrieb dann natürlich nicht, aber das halte ich für weniger relevant.
Zustimmung.
Ich bastele (jedenfalls im Moment) nur etwas, was Formulare auswerten soll, nicht sie herstellen.
Wenn's darum ginge, hätte ich Dir auch eine XForms-Implementierung vorgeschlagen ;-)
Aber dein Gedanke war hilfreich, die Factory variabel unterschiedliche Objektklassen mit gleichem Interface zurückgeben zu lassen. In dieser Hinsicht arbeite ich mal weiter.
Viel Erfolg!
Cheatah