derwunner Geschrieben 22. Januar 2013 Teilen Geschrieben 22. Januar 2013 Hallo, ich habe ein Verständnisproblem mit dem MVC Entwicklungsmodell/Pattern in PHP. In Java ist es mir klar, wie es funktioniert. Aber wie setze ich es in PHP um? Ich hatte vor einer Weile danach gegoogelt, und bin darauf gestoßen: MVC mit PHP - Das MVC-PAttern mit PHP implementieren und verwenden Wirklich verstanden hatte ich es danach auch nicht. Außerdem ist das ja eher auf dynamische Templates ausgelegt und weniger auf Datenbankanwendungen. Ich dachte mir, dass es folgendermaßen funktioniert (ich bitte um Verbesserung): Nehmen wir uns als Beispiel folgende Datenbanktabelle: Artikel artnr int not null primary_key bez char(40) not null instock int foreign_key preis double Wenn ich diese Tabelle anzeigen würde, würde ich es folgendermaßen gestalten (wir gehen mal davon aus, dass ich den Lagernamen (instock) bezogen habe aus der anderen Tabelle der Einfachheit halber): Das Model (artikel_m.php): public class artikel_m // extends DBModell oder aehnliches { private $artnr; private $bez; private $stock; private $preis; private $instock; public artikel_m ($artnr = "", $bez = "", $stock = "", $stock = "", $preis = "", $instock = "") { if ($artnr == "" && $bez == "" && $stock == "" && $preis == "" && $instock == "") { // nicht uebergeben } else if ($anr != "") { // Daten aus DB beziehen } } public static function get_saetze() { // Liest alle Artikel aus der Datenbank in artikel_m Objekte. } // Funktionen zum Aendern/Loeschen/Speichern // Getter und Setter fuer die Klassenvariablen } [/PHP] Die View (art_view.php): [PHP] <html> <head> <title>Artikelstammsatz anzeigen</title> </head> <body> <table border="0"> <tr><td>Artikelnummer</td><td>Bezeichnung</td><td>Preis</td><td>In Lager</td> </tr> <?php foreach ($art_arr as $ds) { echo("<tr><td>$ds->artnr</td><td>$ds->bez</td><td>$ds->preis</td><td>$ds->stock</td></tr>"); } ?> </table> </body> </html> Der Controller (art_controller.php): <?php include("artikel_m.php"); $art_arr = artikel_m::get_saetze(); include("art_view.php"); ?> [/PHP] Bitte verbessert meine obige Erklärung zur Umsetzung des MVC Patterns anhand eines kleinen Beispiels. Ich hoffe, ich habe keine Fehler reingebracht, habe den Code nur hier abgetippt. MFG derwunner Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
pixel007 Geschrieben 5. Februar 2013 Teilen Geschrieben 5. Februar 2013 Im Prinzip hast du damit schon mal ganz rudimentär das Ziel von MVC erfüllt, nämlich die Trennung der Darstellung(View) von der Programmierlogik (Model). Was noch fehlt, ist das Routing (Front Controller). Ich würde dir empfehlen mit einem PHP-MVC Framework zu arbeiten. Es würde sich anbieten hierfür Zend oder Symfony2 zu benutzen. Wenn du dort den Anleitungen folgst, programmierst du ganz automatisch nach dem Entwurfsmuster. Als Zusatz würde ich mir mal Folgendes genau angucken: PHP: Constructors and Destructors - Manual PHP: Classes and Objects - Manual PHP: Alternative syntax for control structures - Manual (für die Views) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
derwunner Geschrieben 5. Februar 2013 Autor Teilen Geschrieben 5. Februar 2013 Im Prinzip hast du damit schon mal ganz rudimentär das Ziel von MVC erfüllt, nämlich die Trennung der Darstellung(View) von der Programmierlogik (Model). Was noch fehlt, ist das Routing (Front Controller). Ich würde dir empfehlen mit einem PHP-MVC Framework zu arbeiten. Es würde sich anbieten hierfür Zend oder Symfony2 zu benutzen. Wenn du dort den Anleitungen folgst, programmierst du ganz automatisch nach dem Entwurfsmuster. Als Zusatz würde ich mir mal Folgendes genau angucken: PHP: Constructors and Destructors - Manual PHP: Classes and Objects - Manual PHP: Alternative syntax for control structures - Manual (für die Views) Hallo, danke für die Infos. Aber einen Controller habe ich doch schon? Siehe oben die art_controller.php. Soviel ich weiß enthält das Modell nur die Daten. Je nach Philosophie kann das Model die Daten auch selbständig laden. Der Controller sollte doch die Logik enthalten, oder nicht? In der Zwischenzeit habe ich hier noch ein paar sehr schöne Erklärungen gefunden: MVC - Schnell und einfach erklärt (inkl. Tutorial) - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr Und diese hier finde ich persönlich am besten: MVC - Model View Controller - Pinzke Ich wollte es bewusst ohne Framework machen, denn mit einen Framework kann es ja jeder. Das hat meiner Meinung nach nicht mehr viel mit verstehen zu tun. Zend kenne ich auch, aber das ist doch für kleinere Anwendungen viel zu überdimensioniert. Das Zend Framework bringt ja auch einen eigenen Compiler und Debugger und noch vieles mehr mit, was an Komplexität fast nicht zu übertreffen ist. Symfony ist noch schlimmer meiner Meinung nach. Ein Framework soll einem die Arbeit erleichtern, und nicht erschweren. -.- Die beiden Frameworks haben also ihr Ziel aus dieser Sichtweise verfehlt. Ich bin neulich durch Zufall auf das CakePHP Framework gestoßen: Understanding Model-View-Controller — CakePHP Cookbook v2.x documentation Das sieht doch ganz gut und vernünftig aus. Wenn ich eines verwenden werde, dann das. Weil das ist auch für kleinere Anwendungen gut geeignet und bringt keinen unnötigen Schnick-Schnack mit. Das hat definitiv noch Zukunft, ihr werdet sehen! ;-) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Aras Geschrieben 5. Februar 2013 Teilen Geschrieben 5. Februar 2013 "Du bist ja süß" Symfony 2 und ZF sind definitiv nicht überdimensioniert. Du willst erstmal lernen, dann ist ok dass selber zu programmieren. Aber da Zeit zu investieren ein eigenes Framework zu programmieren, dass eine vernünftige Dependency Injection oder Aspektorientierte Programmierung hat, ist es leichter sich mit den o.g. Frameworks auseinanderzusetzen. Warum verwendest du eigentlich nicht PHP5? Und warum ist dein artikel_m gleichzeitig ein DAO und ein Modell? Schonmal wegen FatClient Thin-API und ThinClient und Fat-API Architektur nachgedacht? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
pr0gg3r Geschrieben 5. Februar 2013 Teilen Geschrieben 5. Februar 2013 Hallo, danke für die Infos. Aber einen Controller habe ich doch schon? Siehe oben die art_controller.php. Soviel ich weiß enthält das Modell nur die Daten. Je nach Philosophie kann das Model die Daten auch selbständig laden. Der Controller sollte doch die Logik enthalten, oder nicht? Nein, der Controller selbst holt keine Daten vom Speicher sondern verarbeitet sie und reicht sie an die View weiter. Weit ausgeholt handelt der Controller auch Daten (Sessiondaten, GET/POST/FILE-Parameter, ...). mit den Storagedaten hat aber nur das Model zu tun, wird aber vom Controller angesteuert. - Model (holt/bearbeitet die Daten aus Dateien, Datenbank) - View (Templatedateien, HTML-Ausgabe) - Controller ("hält" beides zusammen, bestimmt, welches Modell aufgerufen wird und welche View ausgegeben werden soll) Ich wollte es bewusst ohne Framework machen, denn mit einen Framework kann es ja jeder. Das hat meiner Meinung nach nicht mehr viel mit verstehen zu tun. Dass du es selbst versuchen möchtest ist lobenswert. Jedoch gibt es verschiedene Möglichkeiten, "MVC" zu interpretieren und umzusetzen. Das unterscheidet sich selbst bei den großen Framworks (Zend, Symfony, Cake PHP, Codeigniter, ...). Wie die Architektur deines Frameworks aussehen soll, musst natürlich du selbst entscheiden. Ich schreibe auch ab und an aus langeweile an meinem kleinen MVC-Projekt, habe aber auch ein paar mal neu angefangen, da man manche Architektur-Probleme erst bemerkt, wenn man schon länger daran schreibt. Der große Vorteil der Frameworks ist natürlich auch die Skalierbarkeit hoch. Wenn das Projekt also wächst, kann man es ohne Probleme den neuen Anforderungen anpassen, ohne am Framework selbst etwas ändern zu müssen. Wenn man mal schaut, welche Firmen die großen Frameworks einsetzen und welche Projekte sie damit realisieren, dann ist es natürlich meist etwas anderes, als die 5-Seiten-Homepage vom Friseur nebenan. Einarbeiten muss man sich natürlich immer. Auch musst du nicht alles verwenden, was die Frameworks ermöglichen. Ob ein Framework + Einarbeitung Sinn macht oder ob man schneller was eigenes Entwickelt oder ein CMS verwendet, muss man natürlich selber entscheiden. Wir wissen nicht was du vor hast. Wie mit dem Beispiel mit dem Friseur: dafür braucht man sich weder in ein MVC-Framework noch in ein professionelles CMS wie Typo3 einarbeiten. Aber wenn man das Framework einmal beherrscht, sind kleine Projekte damit genauso realisierbar wie große. Und zwar ohne, dass man sich erneut einarbeiten muss. Also musst du entscheiden, ob du auch an künftige Projekte denkst. Schau dir die pupären Frameworks (Zend, Symfony, Cake PHP, Codeigniter, ...) an, mach ein paar Tutorials und entscheide dann. Aber bei manchen hat man schnelle Resultate und steckt dann fest, bei anderen braucht man länger um es zu verstehen, kommt aber langfristig besser damit klar. Deshalb ist es schwierig, sich sofort für eins zu entscheiden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
derwunner Geschrieben 11. Februar 2013 Autor Teilen Geschrieben 11. Februar 2013 Danke für eure Tipps! Und ja, ich sehe es jetzt ein, dass es besser ist ein Framework für größere Projekte zu verwenden, die längerfristig gesehen skalierbar sein sollen. Ich wollte eigentlich nur so allgemein mal fragen, ein spezielles Projekt habe ich damit nicht vor. Ich möchte mich nur an Entwicklungsmodelle halten, wenn ich etwas programmiere. Denn das ist dann auch lesbarer für andere Leute. Zum Thema sinnvoller Einsatz von Frameworks: Nun, ich sehe das so: Wenn ich ein Framework nicht komplett ausnutze, bzw. nur geringe Teile davon verwende, dann kann ich mir die paar Methoden auch selber schreiben, bin ich schneller. Z. B. wird ja auch bei jquery nicht gefragt, ob man es wirklich braucht, die meisten Leute binden es einfach ein. Jquery kann mehr als nur eine Bilderüberblendung oder ein Link-Mouseover Effekt. Wenn ich nur das haben will, naja, dann ist jquery wirkich übertrieben. Das sind 10 Minuten Arbeit, nicht mal! Und zu der Frage, warum ich nicht PHP5 benutze: Soviel ich weiß ist Objektorientierung erst ab PHP5 möglich. In meiner Problembeschreibung verwende ich doch Objekte. Ich mische auch nicht DAO mit dem MVC Pattern. Objektrelationales Mapping ist euch ein Begriff?! Genau das habe ich in meinen Model umgesetzt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
pixel007 Geschrieben 12. Februar 2013 Teilen Geschrieben 12. Februar 2013 Zum Thema sinnvoller Einsatz von Frameworks: Nun, ich sehe das so: Wenn ich ein Framework nicht komplett ausnutze, bzw. nur geringe Teile davon verwende, dann kann ich mir die paar Methoden auch selber schreiben, bin ich schneller. Aber bist du auch genau so gut? Ist es so sicher und bereits völlig getestet? Es ist nicht nötig das Rad ständig neu zu erfinden... Vielleicht wächst dein Projekt weiter und brauchst die Funktionen doch. Der Grund "Ich brauche das meiste ja eh nicht", ist absolut kein Argument gegen die Nutzung. Du kannst auch ein "kleineres" Framework benutzen. Desweiteren hast du denn nicht mehr diesen Vorteil: Denn das ist dann auch lesbarer für andere Leute. Soviel ich weiß ist Objektorientierung erst ab PHP5 möglich. Das ist falsch! OOP ging in eingeschränktem Maße auch mit PHP4. Der PHP 5 Constructor ist "__construct()". DU benutzt den PHP4 Constructor. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.