Linda: PHP - Trennung von Applikation und Design

Hallo alle,

seit langem grübele ich hier nach. Wie kann ich in einem großen PHP/MySQL-Projekt Darstellung (Design) und Programmierung _effektiv_ trennen. Ich stelle mir ein dreischichtiges Model bestehend aus Klassenbibliothek, eine Applikationsschicht und eine Präsentationsschicht vor.

Die Trennung zwischen Klassen und der Applikationsschicht habe ich im Griff. Aber wie bringe ich das ganze zum Front-End? Eine zeitlang habe ich versucht mit Template-Systemen zu arbeiten (insbesondere Smarty). Dabei habe ich einen für mich riesigen Nachteil festgestellt. Bei der Verwendung von Smarty, stelle ich in Applikationsschicht die für die Darstellung benötigten Variablen und Objekte dem Template-System zur Verfügung. Das „zur Verfügung stellen“ stört mich, da ich bereits hier an die Präsentationsschicht gebunden bin.  Im Template selbst fühle ich mich noch mehr eingeschränkt, da ich die beispielsweise Smarty-Syntax sehr umständlich finde. Ich verbringe etwa 50% der Zeit mit dem „Zähmen“ des Template-Systems anstatt mit der eigentlichen Programmierung. Zusätzlich möchte ich nicht an die Fremdentwicklungen angewiesen sein.

Wie mache ich es selbst, ohne dass ich so ein Monstrum wie Smarty entwickeln muss? Gibt es da „reine“ PHP-Gedanke ohne fremde Syntax, dennoch elegant und effizient? Ich liebe Tutorials :) und Links auf nützliche Quellen, die Gedanken anstoßen.

Ps. CMS lösen mein Problem nicht! Da es hier NICHT um Trennung von Design und Inhalt geht. Danke!

Gruß, Linda

--
2 hours of try and error can save 10 minutes of manual reading
  1. echo $begrüßung;

    Das „zur Verfügung stellen“ stört mich, da ich bereits hier an die Präsentationsschicht gebunden bin.

    Wie stellst du dir anders eine Zusammenarbeit zwischen Präsentationschicht und Applikation vor? Soll der eine vom anderen nicht wissen müssen, welche Daten es gibt bzw. welche Daten dargestellt werden können?

    Zusätzlich möchte ich nicht an die Fremdentwicklungen angewiesen sein.

    Zu Smarty kann ich nichts weiter sagen, außer dass ich mich irgendwann dagegen entschieden habe. Für das Grobe verwende ich aus PEARs HTML-Abteilung HTML_Template_IT bzw. dessen Erweiterung HTML_Template_Sigma. Hinzu kommt noch HTML_QuickForm für Formularbearbeitung, das kümmert sich um die Erzeugung des HTML-Codes und um die Eingabedatenprüfung, muss aber irgendwo gesagt bekommen, welche Elemente darzustellen sind. Tabellarische Daten muss man auch gelegentlich darstellen, da habe ich mir, weil ich von Ausführung von Structures_DataGrid nicht so sehr angetan war, was eigenes geschrieben, das mit HTML_Table und Pager zusammenarbeitet.

    Wie mache ich es selbst, ohne dass ich so ein Monstrum wie Smarty entwickeln muss?

    Wenn es dir nur um ein Template-System geht, hätte ich noch eine minimalistische Anregung.

    echo "$verabschiedung $name";

  2. was hast du für eine klassenschicht?

    3-Tier modell bedeutet eine aufteilung in präsentation, anwendung und datenhaltung mit klaren schnittstellen. dieses template gedöns hilft da nicht weiter.

    besser ist es, sich an java enterprise zu orientieren.
    ob für die präsentation nun ein unnötiges template kram benutzt wird, oder die ausgabe gleich per echo erfolgt, ist letztlich nicht entscheidend.
    wichtig ist die anwendungsschicht (session). deren methoden (ucs) stellen die  zu präsentierenden daten bereit.
    perfekt wäre dann noch eine separate entity-schicht für die persistierten objekte.