dedlfix: Umsetzung der Trennung von PHP- und HTML-Code / des EVA-Prinzips

Beitrag lesen

Hi!

Das klingt nett, aber sehe ich es dann richtig, dass Lazy-Fetch vor allem Performance-Vorteile mit sich bring?

Ja, spart Zwischenspeicher und die Handlung, ihn zu füllen. Allerdings ist das in PHP mit dem Speicherverbrauch nicht ganz so wild. Wenn PHP eine Variable aufgrund einer Zuweisung oder Übergabe als Parameter kopieren müsste, legt es stattdessen eine Quasi-Referenz an. Es gibt also eine alte Verwaltungsstruktur für die alte Variable und eine für die neue, die aber beide auf den selben Inhalt verweisen. Erst wenn der durch eine Änderung an einer der beiden Stellen nicht mehr gleich ist, wird eine echte Kopie erzeugt. (References explained)

Gestern hatte ich eine Idee, welchen Mittelweg ich hier für meine Zwecke momentan für am besten geeignet halte. Besonders gefällt mir, dass die Vorteile von HTML gespickt mit PHP-Ausgaben mit denen von Platzhaltern und printf() kombiniert werden:

Gefällt mir nicht wirklich. Auf den ersten Blick muten die Platzhalter seltsam an, die da so scheinbar motivationslos in der Gegend herumlungern. Erst später kommt ein Funktionsaufruf, bei dem man den Inhalt der Funktion kennen muss, um ihn zu verstehen. (Bekommt man aber hin, nach der ersten allgemeinen Verunsicherung.) Nehmen wir mal an, du hast dich in diese Methode verliebt - klar, ist ja ein Kind deiner eigenen Gedanken - und kommst dann an eine Stelle, an der der HTML-Code-Block größer wird und Platzhalter und deren Ersetzung noch mehr auseinanderbringt. Was machst du dann?

Angenommen, ich möchte eine Liste darstellen. Dann sollte meine Verarbeitung doch ein Array mit Listenelementen liefern. Und diese Listenelemente sollten doch frei von irgendwelcher Auszeichnung wie z.B. <li> sein, um zu ermöglichen, dass ich die Listenelemente nicht nur in einem HTML-Dokument ausgeben kann, sondern meine Ausgabe z.B. auch ein Bild erzeugen kann, auf welchem die Liste abgebildet ist oder ein RSS-Feed, welches nur die ersten paar Listenelemente will, diese jedoch auch frei von irgendwelchen HTML-Elementen, da die Listenelemente vielleicht als Aufzählung dargestellt werden sollen etc.
Solche (für mich momentan hypothetischen) Anwendungsfälle sind es, an die ich denke, wenn ich davon spreche, dass in bestimmten Fällen Verarbeitung und Ausgabe doch völlig und nicht nur „so gut wie möglich“ getrennt sein müssten.

Die Verarbeitung ist die Ermittlung der Daten. Alles was du hier aufgezählt hast, wäre Ausgabelogik.

Es wird etwas komplexer, wenn die Aufgabe ist, ein oder mehrere Bilder vielleicht erst noch in Empfang zu nehmen, sie aber auf alle Fälle im Dateisystem abzulegen und zusätzlich noch Thumbnails zu erstellen. Weiterhin sollen Bilder und Thumbnails Wasserzeichen eingebaut bekommen. Die eigentliche Ausgabe des Scripts ist aber eine HTML-Seite, die über den Erfolg der Aktion berichten soll. Hier kann man erstmal nicht relativ klar die drei EVA-Teile haben. Stattdessen kann man innerhalb der Verarbeitung Unteraufgaben vergeben, die dann jeweils für sich nach EVA gestaltet sind.

EVA ist übrigens kein Allheilmittel, sondern stößt auch irgendwann an seine Grenzen. Aber es gibt ja auch noch andere Entwurfsmuster, nach denen man sein Programm strukturieren kann.

Lo!