hotti: Zend 2

Beitrag lesen

Hallo Forum,

nachdem ich nun seit etwa 15 Jahren Websites mit PHP baue aber zum Einen immernoch nicht objektorientiert programmiere und zum Anderen immernoch dazu neige, alles immer wieder von Hand zu entwickeln, möchte ich mir an eine andere Herangehensweise angewöhnen. Mein Plan ist, mein nächstes Projekt mit Zend 2 zu realisieren. Meine Unsicherheit dabei ist, dass ich eigentlich garnicht weiss, was genau Zend 2 ist und wie ich am besten da einsteige.

Meine Herangehensweise wäre diese hier:
Zu prüfen, inwieweit OOP sich dafür eignet, bisherige Programmieraufgaben und auch zukünftige Projekte rationeller entwickeln zu können und darüber hinaus den Einsatz eines Frameworks in Erwägung zu ziehen. Das heißt insbesondere, dass ich selbst konkrete Vorstellungen davon habe, wie ein Framework beschaffen sein muss. Erst dann würde ich mich auf dem Framework-Market umschauen, ob da eines dabei ist, was meinen Erwartungen entspricht.

Wo fange ich am besten so an?

Mit OOP, aber nicht OOP zum Zelbstzweck sondern als Mittel zum Zweck. OOP ist sehr klischeebehaftet, OOP als die Lehre von Äpfeln, Birnen, Bienen und Blütenstaub ist allenfalls für den Biertisch tauglich. OOP ist eine praktische Angelegenheit, nimm Dir eines Deiner Scripts zur Hand, eines wo möglichst viele einzelne Variablen deklariert sind und überlege Dir beispielsweise, ob sich die Kapselung der einzelnen Variablen in _ein_ Datenobjekt lohnt. Daten wollen bewegt werden, welche Funktionen kämen dazu in Frage. Erst dann kommt die Klasse und ein geschielter Blick auf mögliche übergeordnete Instanzen. Dann kann aus dem Datenobjekt eine Instanz einer Klasse werden und die Funktionen den akademischen Grad 'Methode' bekommen.

Betrachte eine Website als Ansammlung von Datenobjekten. Objekte haben Attribute wie title, descr, body. Sie haben Gemeinsamkeiten wie z.B. einen <!doctype><html><head> [..] </head> sofern sie vom Content-Type: text/html sind. Das da [..] kann von Seite zu Seite abweichen: Andere links zu CSS-Dateien, JS-Dateien usw., was letztendlich über weitere Seiten-Attribute gesteuert werden kann.

Content-Management: Haben wir außer text/html auch andere Content-Types, welche auszuliefern sind? Und wieder eine Gemeinsamkeit: Egal ob jemand eine PDF oder ein HTML anfordert, in allen Fällen  ist es ein HTTP-Request auf eine eindeutige Webressource. Ob die Eindeutigkeit allein über den Path geregelt wird oder über angehängte Parameteter ist die nächste Frage: Das Routing und wie kompliziert wird das zu machen gedenken und welche Abhängigkeiten sich ergeben, wenn wir eine Klasse die sich um den Content der Response kümmert, im URL kodieren würden... solche Gedanken gehen in Richtung Skalierbarkeit, sei es bspw. drum eine Seite um ein Formular zu erweitern (neuer URL oder die an legacy URL gebundene Klasse erweitern oder eine andere Klasse).

Zu Letzterem ist hier ein schönes Beispiel: Ich habe sehr viele Seiten, die über class=DBFileResponse ausgeliefert werden, die Erweiterung DBFileResponse::downlink ermöglicht den Einbau eines Link zum Download über einen Platzhalter im Template und welcher Content-Type auf Klick dann ausgeliefert wird, darum kümmert sich die Klassenerweiterung anhand der für die Seite konfigurierten Attribute.

Eine andere Klassenerweiterung könnte z.B. den Einbau eines Formulars und die Kontrolle über Benutzereingaben übernehmen... soweit zum Thema Vererbung.

Und wie siehts mit dem Debugging aus, Fehlersuche, welche Klasse liefert eine verflixte Seite aus? Ich schaue in den Response-Header, ein ins HTML eingebauter Kommentar würds auch machen.

Testgetriebene Entwicklung: Wie teste ich automatisch, ob das Einloggen eines bestimmten Users geklappt hat? Etwa indem die ganze Seite nach bestimmten Text-Vorkommen geparst werden muss? Oder ob eine bestimmte CSS-Datei geladen wurde? Und was dann, wenn der Designer eine andere CSS-Datei einbaut, tja, dann geht der Test in die Hose; also doch besser die Prüfkriterien in x-headers senden, dann dauert der Test auch nicht die ganze Nacht und die Auswertung nicht den ganzen Vormittag...

Du stehst nicht am Anfang, baue auf Deine Erfahrung ;)