Ist MVC nur die SEO der PHP-Programmierung?

9

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?

Mario
quelle
Fazit: PHP-Frameworks implementieren ein Konzept ähnlich dem ursprünglichen MVC. Ich denke, es ist am besten hier genagelt: stackoverflow.com/questions/1549857/simple-php-mvc-framework/…
Mario
Ich war überrascht zu lesen, dass "die meisten PHP-Frameworks Ansichten als einfache Seiten verwenden". In allen von mir verwendeten PHP-Frameworks kann eine Ansicht alles sein, es ist im Grunde nur eine HTML-Vorlage. Es kann sich also um ein Textfeld, eine Seitenleiste, eine Navigationsleiste, einen statischen Textblock oder sogar ein Seitenlayout handeln. Ich kann mir kein Framework vorstellen, mit dem Sie Ansichten nicht in Ansichten einbetten können, sodass Sie so ziemlich alles tun können, solange Ihre eigentliche Geschäftslogik / -verarbeitung zuvor im Controller ausgeführt wird.
Lotus Notes
Das Modell (nicht Plural) ist eine Ebene . Es ist keine einzelne Datei oder Klasse. Es ist eine Sammlung von Domänenobjekten, Datenzuordnungen und Diensten. Lesen Sie dies .
James
3
... SEO? "Suchmaschinenoptimierung"?
Izkata

Antworten:

12

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.

DisgruntledGoat
quelle
Ich habe keinen Streit mit dem abstrakten Konzept von MVC. Es ist mein Einwand, dass PHP-Frameworks unehrlich sind, wenn es darum geht, nur Passive-MVC zu implementieren. Sogar das Muster "Model-View-Presenter" ist eine realistischere Beschreibung. Aber sicher, Begriffe müssen gebogen werden, wenn Sie sie auf eine andere Domain anwenden. Die ursprüngliche Frage; Könnte der Begriff Biegen es zu einem Schlagwort machen?
Mario
3

Da mir die PHP-Frameworks nicht bekannt sind, wird dies aus einer einfachen Sprachansicht gesehen.

Modelle:

Theoretisch sollten Modelle fett sein und Geschäftslogik enthalten

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, ...).

und Controller sollten Thin Handler sein (Eingabe-> Ausgabe)

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 ...

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.

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:

Problemumgehungen mit AJAX-Rabatt. Auf Webseiten können keine Ansichten angezeigt werden. PHP-Frameworks pumpen immer noch Seiten aus.

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.

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.)

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:

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.

MVC ist eine Softwarearchitektur / ein Softwaremuster, in dem der Controller ausgeführt wird und wie lange nicht.

Tamara Wijsman
quelle
1

PHP-Webanwendungen funktionieren jedoch nicht mit Live-Ansichten (GUI-Elementen) und einer dauerhaften Controller-Laufzeit.

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" scheint wie ein Schlagwort für PHP-Frameworks verwendet zu werden.

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 .

ist MVC nur die SEO der PHP-Programmierung?

MVC und SEO sind zwei Dinge auseinander, aber ja ... MVC wird immer beliebter.

Tamara Wijsman
quelle
1
Sicher, AJAX-UI-Elemente bringen es näher, aber das ist objektiv eine Problemumgehung. Und es scheint immer noch die Definition zu verbiegen. (Übrigens sind mir Cappucino.org und andere echte Toolkits bekannt, aber ich habe mich auf das Brutto der PHP-Frameworks bezogen.)
Mario
Ich würde es nicht als Problemumgehung bezeichnen. Dann können Sie auch Qt und andere Frameworks als Problemumgehungen zählen. Es gibt nur den Datenübertragungsaufwand zwischen Server und Client, und bei den aktuellen Verbindungsgeschwindigkeiten und Latenzen ist dies nicht einmal viel nicht mehr. Ich sehe nicht, wie es die Definition verbiegt: Das Muster isoliert die Domänenlogik (die Anwendungslogik für den Benutzer) von der Eingabe und Präsentation (UI) und ermöglicht so die unabhängige Entwicklung, Prüfung und Wartung jeder einzelnen.
Tamara Wijsman
1
Ich verstehe was du meinst. Wenn Sie PHP als Anwendungsserver und AJAX als RPC-Mechanismus zwischen Logik und Benutzeroberfläche interpretieren, ja. Ich würde es jedoch immer noch als Problemumgehung für HTTP bezeichnen. OTOH ist sich nicht sicher, ob es für die MVC-Stückelung relevant ist. Ich glaube, ich lehne tatsächlich die Implikation ab, dass nur "MVC" die von Ihnen beschriebenen reaktionsschnellen und interaktiven Web-Benutzeroberflächen bereitstellt.
Mario
-1

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.

Baklap
quelle
+1 Aber ist es nur ein Terminologievorteil oder gibt es PHP-Frameworks, die einer Java-Implementierung nahe kommen? (Und implizit, sprechen Sie über Java-GUIs oder Web / Struts?)
Mario
Ich weiß es nicht genau, aber ich verwende das Zend-Framework und ich denke, es ist dasselbe mit anderen MVC-Frameworks: Es ist sehr wichtig zu wissen, was in Ihrem Modell, Ihrer Ansicht und Ihrem Controller zu tun ist, und damit die Lücke zwischen der Programmierwelt und dem Internet-Skript Welt ist geschlossen. Vielleicht ist das Internetscripting-Zeitalter vorbei, und das würde ich gerne sehen. Es ist zu fehlerhaft.
Baklap