kostenloser Webspace werbefrei: lima-city


PHP Trennung Logik und Design: Best Practices?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    wolkenlos0

    wolkenlos0 hat kostenlosen Webspace.

    Hallo,
    ich komme von ASP.NET Webforms und ASP.NET MVC. und habe schon kleinere Sachen in PHP gemacht.
    Da dort mehr oder weniger stark eine Trennung von Logik und Design vorgeben wird und ich dies auch hilfreich finde, wollte ich fragen, welche Best Practices/Vorgaben es in dieser Richtung in PHP gibt.
    Falls relevant: Zur Zeit verwende ich Eclipse mit PHP Plugin zum entwickeln und bin gerade dabei, objektorientiertes PHP zu lernen.
    Hoffe ihr könnt mir helfen oder zumindest verschiedene Meinungen dazu sagen.
    schöne Grüße an einem regnerischen Tag,
    Wolkenlos
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. t*****b

    ASP und auch ASP.NET basiert grundlegend genauso wenig auf MVC, wie PHP oder jede andere (Script-)Sprache. Die Entwicklungsumgebung (MS Visual Studio oder wie das heißt), legt aber neue Projekte, Forms, etc. automatisch mit den einzelnen MVC-Modulen und dem eigenen Framework an. Genauso kannst du auch in PHP ein Framework wie zB CakePHP, das Zend-Framework, Cake, etc. benutzen oder dein eigenes entwickeln.
  4. Autor dieses Themas

    wolkenlos0

    wolkenlos0 hat kostenlosen Webspace.

    ZB. bei Webforms gibt es so etwas bei jedem Modul (Klassen wie Formularen, Buttons, ... und die Webseite an sich) Events wie OnPageLoad, OnClick, OnOutput(?), etc. die in verschiedenen Stadien aufgerufen werden.
    In ASP.NET MVC gibt es auch solche Ereignisse und man baut ein Modell das man dann in der View-Datei ausgibt.
    Gibt es ähnliches oder Best Practices dazu auch in PHP bzw. zur Trennung in mehrere Dateien?
  5. php wird nur einmal beim Aufrufen der Seite ausgeführt und kann auch nur dabei eingaben entgegen nehmen. php kann solche sachen also nicht. zur trenn ung von logig und desgin verwende ein Templetesystem wie zum beispiel smarty, was auch auf php basiert.
  6. g****e

    Du hast hier tatsächlich 2 Seiten zu betrachten: Client und Server. Dein Server ist in PHP geschrieben, tut allerdings nichts anderes als Informationen zu senden oder zu verarbeiten. Der Client wird dabei in HTML/CSS/Javascript geschrieben. Ich glaube in ASP.NET ist es nicht so. Doch fangen wir bei der einfachen Sache an:
    Der Server ist in PHP geschrieben. Mit PHP selbst lässt dich das MVC Design sehr schön umsetzen. Du schreibst einen Controller, welcher die entgegengenommenen Daten auswertet und das Programm entsprechend steuert, bzw die Modelle entsprechend läd und Verknüft. Deine Modelle entsprechen eher Dateninterfaces, welche du zur Verarbeitung nutzt. Eines dieser Dateninterfaces ist meistens eine Template Engine. Diese läd die Views, welche in seperaten Files gehalten werden, und verarbeitet sie, entsprechend dem, was der Controller vorgibt, und was an Daten von den anderen Modellen rein kommen. Diese Views entsprechen dann am Ende dem Output. Dieser Output kann alles mögliche beinhalten.
    Der Client empfängt die Daten und Interpretiert sie. HTML und CSS werden zur Darstellung verwendet, Javascript zur Automatisierung und Eventbehandlung. Hierauf geh ich allerdings nicht näher ein, da diese Seite auch sehr Umfangreich währe, und du nach PHP fragtest. Deine Events (onClick, onLoad usw) musst du allerdings alle im Clienten behandeln, denn dieser wirft diese ja auch. Hier brauchst du also auch noch Javascript.

    ASP.NET lässt sich in meinen Augen nicht mit PHP vergleichen. Es sind vom Prinzip her sehr unterschiedliche Sprachen. Sie erfüllen einen ähnlichen Zweck, aber sind grundlegend unterschiedlich. Für PHP solltest du darum noch einmal bei 0 Anfangen, und aus deinen Kenntnissen dann kannst du schneller die Logiken erschließen. Wenn du dich bereit fühlst für große Projekte, um mal rein zu schauen, schau dir dieses Projekt an:https://github.com/Basti-sama/Bengine , das ist, und das werden wohl viele sagen, PHP Code in höchster Qualität und Komplexität (wobei, wenn man nen bissel drin ist, ists garnicht sooo komplex, aber es ist doch ein erstaunliches Konzept, welches am Anfang einfach nur überwältigt). Das ist ein Beispiel, wie man es nach Jahren an Praxis umsetzen würde.

    Mein Tipp darum: Fang bei den Basics an, und schau dir erstmal das Grundkonzept an, denn dieses ist schon ein wenig anders.

    Liebe Grüße
  7. Autor dieses Themas

    wolkenlos0

    wolkenlos0 hat kostenlosen Webspace.

    ggamee schrieb:
    Du hast hier tatsächlich 2 Seiten zu betrachten: Client und Server. Dein Server ist in PHP geschrieben, tut allerdings nichts anderes als Informationen zu senden oder zu verarbeiten. Der Client wird dabei in HTML/CSS/Javascript geschrieben. Ich glaube in ASP.NET ist es nicht so. Doch fangen wir bei der einfachen Sache an:
    Der Server ist in PHP geschrieben. Mit PHP selbst lässt dich das MVC Design sehr schön umsetzen. Du schreibst einen Controller, welcher die entgegengenommenen Daten auswertet und das Programm entsprechend steuert, bzw die Modelle entsprechend läd und Verknüft. Deine Modelle entsprechen eher Dateninterfaces, welche du zur Verarbeitung nutzt. Eines dieser Dateninterfaces ist meistens eine Template Engine. Diese läd die Views, welche in seperaten Files gehalten werden, und verarbeitet sie, entsprechend dem, was der Controller vorgibt, und was an Daten von den anderen Modellen rein kommen. Diese Views entsprechen dann am Ende dem Output. Dieser Output kann alles mögliche beinhalten.
    Der Client empfängt die Daten und Interpretiert sie. HTML und CSS werden zur Darstellung verwendet, Javascript zur Automatisierung und Eventbehandlung. Hierauf geh ich allerdings nicht näher ein, da diese Seite auch sehr Umfangreich währe, und du nach PHP fragtest. Deine Events (onClick, onLoad usw) musst du allerdings alle im Clienten behandeln, denn dieser wirft diese ja auch. Hier brauchst du also auch noch Javascript.

    Das entspricht auch ungefähr dem MVC4-Framework von ASP.NET:
    Der URL-Aufbau ist dort /Controller/Funktion(.aspx)?Parameter
    Beim Clientaufruf wird dann in der richtigen Controllerklasse die entsprechende Funktion mit den Parametern aufgerufen. Dort verarbeitet man die Daten und erzeugt ein Model. Anschließend ruft man die Funktion Renderview("Viewname", Model); auf. Falls man als Viewtyp Razr hat, hat man dort praktisch Standardhtml mit CSS/JS und vorgefertigte Viewobjekte wie Date/Kalenderpicker. Per inline-Code fügt man die Daten aus dem Model ein.

    ggamee schrieb:
    ASP.NET lässt sich in meinen Augen nicht mit PHP vergleichen. Es sind vom Prinzip her sehr unterschiedliche Sprachen. Sie erfüllen einen ähnlichen Zweck, aber sind grundlegend unterschiedlich. Für PHP solltest du darum noch einmal bei 0 Anfangen, und aus deinen Kenntnissen dann kannst du schneller die Logiken erschließen. Wenn du dich bereit fühlst für große Projekte, um mal rein zu schauen, schau dir dieses Projekt an:https://github.com/Basti-sama/Bengine , das ist, und das werden wohl viele sagen, PHP Code in höchster Qualität und Komplexität (wobei, wenn man nen bissel drin ist, ists garnicht sooo komplex, aber es ist doch ein erstaunliches Konzept, welches am Anfang einfach nur überwältigt). Das ist ein Beispiel, wie man es nach Jahren an Praxis umsetzen würde.

    Mein Tipp darum: Fang bei den Basics an, und schau dir erstmal das Grundkonzept an, denn dieses ist schon ein wenig anders.

    Liebe Grüße


    Einfach oder anfängergeeignet kann man Bengine nicht nennen, nachdem ich eine halbe Stunde mal gesucht hab, um die Controller-Datei zu finden^^
    Nach dem ersten reinschauen nach kommt Bengine SPA.NET MVC4 sehr nahe, nur dass der "Meta-Controller" dort nicht sichtbar ist und einiges von der IDE abgenommen wird.
    Bis jetzt hab ich mir in PHP immer so beholfen, dass ich für jede Controllerfunktion eine eigene PHP-Datei gemacht hab, in der das Modell befüllt habe und am Schluss die View aufgerufen hab, wo ich am Beginn der Seite eine Überprüfung hatte, um sicher zu stellen, dass die Seite nicht direkt aufgerufen wird. weiters hab ich da includes gemacht für Loginfelder etc. die auf jeder Seite gleich sind.
  8. g****e

    Die Bengine ist auch für Anfänger unter keinen Umständen geeignet! Es ist ein Beispiel, wie es später aussehen kann. Die URL Struktur ist ähnlich. Aber in diesem Beispiel heißt es: /File/SID/Controler/Module/Argument1/Argument2...
    Das war auch nur als Beispiel, dass man solche Konstrukte durchaus aufbauen kann, aber man muss hier ein wenig mehr selbst machen und ausholen. ASP.NET baut da sehr viel für einen bereits zurecht, diese Struktur musst du dir in PHP erst selbst schreiben. Dafür wäre in meinen Augen ein Bootstrap nötig, welcher die URL parsed, und darauf aufbauend entsprechende Controller läd, welche die weitere Arbeit übernehmen. Die Struktur lässt sich aber auf jedenfall aufbauen.

    Wie man es aufbaut ist an sich egal, allerdings sei gesagt, dass man zu viele Datein nicht so schön warten kann, wie ich finde. Eine gute Möglichkeit wäre tatsächlich mit einer Bootstrapanalyse ein entsprechenden Teil zu laden. Dabei kannst du die Klassen usw über einen Autoloader laufen lassen. Allerdings empfehle ich, wirklich bei den Basics anzufangen, und nicht jetzt los zu laufen, und zu schimpfen, dass PHP grundlegend anders ist. Jede Sprache ist anders, und muss darum anders behandelt werden.

    Liebe Grüße
  9. Bei größeren Projekten wird in PHP zwischen 3 Bereichen unterscheiden:

    Core-Logic - Liefert übergreifende Klassen, Funktionen, API/AJAX Schnittstellen, alle Jobs die nicht Module/Seiten spezifisch sind und so weiter.

    Module/Page-Logic - Kümmert sich um Module/Page spezifische Tasks und liefert am Ende die Page an den Client aus.

    Design - Pures HTML/JS... Logic wird meistens via JS/AJAX geliefert und ist meist aber teil der Module/Page-Logic.


    Wie man diese Trennung erreicht hängt meist davon ab ob man sich auf Frameworks (nicht wirklich empfohlen) verlässt, oder ob man genug Zeit hat alles im Prinzip selber zu machen. Am Ende ist es dann auch egal ob das Projekt dann aus "nur" 20 oder 200 Dateien besteht. Wenn die Dokumentation daraus ne logische Geschichte machen kann, dann ist das meist kein Problem. Dennoch sollte man vermeiden für einzelne Funktionen ne separate Dateien anzulegen.

    Bei Klassen ist das ein wenig anders, die sollten auf jeden Fall immer in eine separate Datei, weil ein Großteil der Klassen gerne mal über 300 Zeilen lang ist und wenn dann mehrere Klassen in einer Datei abhängen, geht die Übersicht flöten.

    Ansonsten, wie schon meine Vorposter gesagt haben, PHP ist recht statisch, sprich was einmal zum Client gesendet wurde, ist beim Client und keine weitere Interaktion ist mehr möglich. Außer man verwendet halt AJAX, um ggf. Daten nach zu laden, zu verändern und so weiter.

    Der aktuelle Trend geht in Richtung AJAX-Only, bei dem der Client nur noch das Design bekommt und die Logic über AJAX abgehandelt wird. Zwar sind meist schon ein paar Basis-Informationen angelegt worden (Session-Start und der gleichen), aber in vielen Fällen wird Heute nicht mehr beim klicken eines Links die Seite neu geladen, sondern via AJAX angepasst. Ein gutes Beispiel ist Google, was mittlerweile komplett ohne PageReload auskommt.

    Was Du am Ende machst, bleibt natürlich Dir überlassen...
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!