Es gibt rund eine Million "PHP-Frameworks". Und die meisten von ihnen rechnen sich nach dem MVC-Muster. Es ist zwar willkommen, den osCommerce-Codierungsstil (Verarbeitungslogik, die stark mit SQL und HTML vermischt ist) zu überwinden, aber es gibt sicherlich einfachere und leichter zu befolgende Ansätze, um ein wartbares Anwendungsdesign zu erhalten.
Das ursprüngliche MVC-Konzept war auf GUI-Anwendungen ausgerichtet. Und für Gtk / Python scheint es machbar, dementsprechend zu folgen. PHP-Webanwendungen funktionieren jedoch nicht mit Live-Ansichten (GUI-Elementen) und einer dauerhaften Controller-Laufzeit. Es ist mit Sicherheit eine Fehlbezeichnung, wenn nur der verwendete Code + die Verzeichnisgruppierung oder die Klassennamen beschrieben werden.
"MVC" scheint wie ein Schlagwort für PHP-Frameworks verwendet zu werden. Und ich habe tatsächlich gesehen, dass ein oder zwei ausgereifte PHP-Frameworks dies zugeben, aber den Ausdruck trotzdem neu definieren, um mit interna übereinzustimmen.
Also ist es im Allgemeinen Schlangenöl? Warum wird keine bessere Terminologie verwendet und ein vernünftigeres Konzept für wartbares PHP verbreitet?
Einige ausführliche Überlegungen
Warum ich vermute, dass PHP-Implementierungen nicht dem tatsächlichen MVC-Muster folgen:
Modelle : Theoretisch sollten Modelle fett sein und Geschäftslogik enthalten, und Controller sollten Thin-Handler sein (Eingabe-> Ausgabe). In Wirklichkeit befürworten die PHP-Frameworks flache Modelle. CI und Symfony setzen beispielsweise Model == ORM gleich. Selbst HTTP-Eingaben werden vom Controller verarbeitet und nicht als Modell behandelt.
Ansichten : Problemumgehungen mit AJAX-Rabatt. Auf Webseiten können keine Ansichten angezeigt werden. PHP-Frameworks pumpen immer noch Seiten aus. Die Schnittstelle folgt immer noch effektiv dem normalen HTTP-Modell. Es gibt keinen Vorteil gegenüber Nicht-MVC-Anwendungen. (Und schließlich kann keines der weit verbreiteten PHP-Frameworks tatsächlich in GUI-Ansichten anstelle von HTML ausgegeben werden. Ich habe eine PHP-Bibliothek gesehen, die Gtk / Console / Web ausführen kann, die Frameworks jedoch nicht.)
Controller : Ich bin mir nicht sicher. Controller müssen im MVC-Modell wahrscheinlich nicht lange laufen und dauerhaft aktiv sein. Im PHP-Framework-Kontext handelt es sich jedoch hauptsächlich um Anforderungshandler. Nicht wirklich etwas, worüber man sich streiten kann, aber es fühlt sich einfach leicht buzzwordisch an.
Würde es bessere Deskriptoren geben? Ich habe Akronyme wie PMVC oder HMVC gesehen. Obwohl Beschreibungen dort mehrdeutiger werden, würden diese möglicherweise die aktuellen Web-Frameworks weniger hokey beschreiben?
Antworten:
Ich denke, Sie sehen das völlig falsch. Eine GUI-App und eine Webseite sind Welten voneinander entfernt, sodass die exakt gleiche Definition von MVC für beide niemals funktioniert. Bei MVC geht es mehr um das Ideal: die Trennung bestimmter Teile der App wie Anzeige und Logik.
In PHP (oder im Web im Allgemeinen) ist eine Ansicht die Webseite selbst: die HTML-Ausgabe. Es ist nicht "live" gemäß Ihrer Definition, aber Sie klicken einfach auf Links, um zum Controller zurückzukehren (dh eine andere Seitenanforderung).
In der Steuerung und im Modell unterscheiden sich die Dinge, wie Sie erklärt haben. In PHP ist das Modell in der Regel die Datenschicht, die mit der Datenbank interagiert und so weiter. Die Situation wird jedoch weiterhin modelliert, und der Controller steuert den Anwendungsfluss weiterhin, wenn auch nur einmal pro Seitenladevorgang.
Der Name "Model-View-Controller" ist also völlig logisch, wenn auch eine andere Implementierung in GUI-Apps als in Web-Apps.
quelle
Da mir die PHP-Frameworks nicht bekannt sind, wird dies aus einer einfachen Sprachansicht gesehen.
Modelle:
Das liegt ganz bei mir, ich verstehe nicht, was PHP damit zu tun hat ...
Modelle sind Datenklassen in PHP, die wahrscheinlich mit der Datenbank kommunizieren könnten.
Dann können Sie auch dasselbe Modell oder ein Teilmodell im JSON-Format an den Client senden.
Ich würde nicht sagen, Geschäftslogik, es ist eher wie Datenlogik (Validierung, Datenbankinteraktion, Import / Export, ...).
Ihre Controller-Klassen interagieren mit den Model-Klassen. Sie sind in der Tat dünn.
Machen Sie basierend auf der Ausgabe einige Dinge mit den Modellen ... und geben Sie eine ModelView an den Client zurück ...
Ich bin mir dieser PHP-Frameworks nicht wirklich bewusst ...
HTTP-Eingaben sollten jedoch verarbeitet werden, bevor sie den Controller erreichen.
Sie können problemlos eine Klasse erstellen, die GET- und POST-Daten in gutes Routing und gute Parameter umwandelt.
Dies ist genau das, was in ASP.NET MVC 2 passiert, und es ist nichts Falsches daran.
Ich weiß nicht, wie dies mit PHP passieren würde, aber ich denke, es würde eng damit zusammenhängen.
Sie könnten sogar leicht die GET- und POST-Daten in ein Modell verwandeln, das Modell könnte möglicherweise eine Konstruktorlogik dafür enthalten. Zu diesem Zweck können auch separate Klassen hinzugefügt werden.
Ansichten:
Ich verstehe nicht, warum es nicht konnte, der einzige Unterschied ist das Protokoll und PHP kann JSON usw. zurückgeben ...
Eine Seite ist Ihre Ansicht und kann über AJAX + JSON angefordert und aktualisiert werden.
Auch hier sind mir diese PHP-Frameworks nicht wirklich bekannt, aber in ASP.NET MVC 2 funktioniert es so.
Der einzige Vorteil, den Sie erhalten (und das gilt auch für normale Anwendungen), ist die Trennung in Modell (Daten) + Ansicht (GUI) + Controller (Logik). Ebenso wird kein C ++ - Framework angezeigt, das anstelle von GUI-Ansichten tatsächlich in HTML oder JSON ausgegeben werden kann.
Regler:
MVC ist eine Softwarearchitektur / ein Softwaremuster, in dem der Controller ausgeführt wird und wie lange nicht.
quelle
Nein, das tun sie sicher!
Denken Sie an AJAX-Anwendungen, dann fragt die Ansicht etwas an den Controller und erhält eine Teilansicht zurück.
Diese Ansicht oder Daten werden dann irgendwo auf der Seite ausgefüllt und somit live aktualisiert.
Der Controller ist auch dauerhaft, da Sie Cookies / Sitzungen verwenden können.
MVC ist eine Softwarearchitektur. Einige Frameworks verwenden sie möglicherweise als Buzz, andere tun dies jedoch ordnungsgemäß
. Eine Liste einiger Frameworks finden Sie auf Wikipedia .
MVC und SEO sind zwei Dinge auseinander, aber ja ... MVC wird immer beliebter.
quelle
Meiner Meinung nach bringt die Verwendung von MVC in PHP Programmierer ins Web. Es ist einfacher, von beispielsweise Java zu PHP zu gelangen, wenn Sie wissen, wie man mit MVC arbeitet.
quelle