Frage

Es gibt rund ein zillionales "PHP -Frameworks". Und die meisten von ihnen berechnen sich als folgen Das MVC -Muster. Während es willkommen ist, den Oscommerce -Codierungsstil zu überwinden (Verarbeitungslogik stark mit SQL und HTML gemischt), gibt es sicherlich einfachere und einfachere Ansätze, um ein wartbares Anwendungsdesign zu erhalten.

Das ursprüngliche MVC -Konzept wurde auf GUI -Anwendungen gezielt. Und für GTK/Python erscheint es machbar, ihm entsprechend zu folgen. PHP -Web -Apps arbeiten jedoch nicht mit Live -Ansichten (GUI -Elementen) und einer persistenten Controller -Laufzeit. Es ist ganz sicher eine Fehlbezeichnung, wenn es nur die Gebrauchsgruppierung von Code + Verzeichnis oder die Namensnamen beschreibt.

"MVC" scheint wie ein Schlagwort für PHP -Frameworks verwendet zu werden. Und ich habe tatsächlich gesehen, wie ein oder zwei reife PHP -Frameworks es zugeben, aber die Redefinition der Phrase sowieso neu definiert, um Interna zu entsprechen.
Ist es also im Allgemeinen Schlangenöl? Warum wird keine bessere Terminologie verwendet und ein vernünftigeres Konzept für den Wartungsabschnitt PHP hat sich vermehrt?

Einige ausführliche Argumentation

Warum ich vermute, dass PHP -Implementierungen nicht dem echten MVC -Muster folgen:

Modelle: Theoretisch sollten Modelle fett sein und Geschäftslogik enthalten, und Controller sollten dünne Handler sein (Eingabe-> Ausgabe). In Wirklichkeit befürworten die PHP -Frameworks seicht Modelle. CI und Symfony beispielsweise gleichsetzen Modell == orm. Sogar der HTTP -Eingang wird vom Controller behandelt und wird nicht als Modell behandelt.

Ansichten: Problemumgehungen mit Ajax Discounted, es können keine Ansichten auf Webseiten geben. PHP -Frameworks pumpen immer noch Seiten aus. Die Schnittstelle folgt immer noch effektiv dem gewöhnlichen HTTP-Modell, es gibt keinen Vorteil gegenüber Nicht-MVC-Anwendungen. (Und schließlich kann keines der weit verbreiteten PHP -Frameworks anstelle von HTML sachlich an GUI -Ansichten ausgegeben werden. Ich habe eine PHP -Bibliothek gesehen, die GTK/Konsole/Web betreiben kann, aber die Frameworks nicht.)

Regler: Ich bin mir nicht sicher. Controller müssen im MVC-Modell wahrscheinlich nicht langlebig und hartnäckig aktiv sein. Im PHP -Framework -Kontext fordern sie jedoch hauptsächlich Handler an. Nicht wirklich etwas, worüber man sich argumentieren kann, aber es fühlt sich einfach etwas Schlagwort an.

Würde es bessere Deskriptoren geben? Ich habe Akronyme wie PMVC oder HMVC herumgeworfen. Obwohl Beschreibungen dort mehr überdeutiger werden, würden diese vielleicht die aktuellen Webrahmen für weniger hokey beschreiben?

War es hilfreich?

Lösung

Ich denke, Sie betrachten das ganz falsch. Eine GUI -App und eine Webseite sind Welten voneinander entfernt, sodass die gleiche Definition von MVC für beide niemals funktionieren wird. Bei MVC handelt es sich mehr um das Ideal: Trennung bestimmter Teile der App wie Anzeige und Logik.

In PHP (oder im Web im Allgemeinen), a Aussicht ist die Webseite selbst: die HTML -Ausgabe. Es ist nicht gemäß Ihrer Definition "live", aber Sie klicken einfach auf Links, um zum Controller zurückzukehren (dh eine andere Seitenanforderung).

Das Regler und Modell dort unterscheiden sich die Dinge, wie Sie erklärt haben. In PHP ist das Modell tendenziell die Datenschicht, die mit der Datenbank und so weiter interagiert. Es wird jedoch immer noch die Situation modelliert, und der Controller steuert den Anwendungsfluss weiterhin, wenn auch nur einmal pro Seite.

Der Name "Modell-View-Controller" ist also perfekt logisch, wenn auch eine andere Implementierung in GUI-Apps im Vergleich zu Web-Apps.

Andere Tipps

Da ich mich der PHP-Frameworks nicht bewusst bin, ist dies aus einer Sprachansicht auf niedriger Ebene zu sehen.

Modelle:

Theoretisch sollten Modelle fett sein und Geschäftslogik enthalten

Das ist völlig zu tun, ich sehe nicht, was PHP damit zu tun hat ...

Modelle sind Datenklassen in PHP, die wahrscheinlich mit der Datenbank kommunizieren könnten.
Anschließend können Sie auch dasselbe Modell oder ein Teilmodell im JSON -Format an den Client senden.

Ich würde keine Geschäftslogik sagen, es ähnelt eher Datenlogik (Validierung, Datenbankinteraktion, Import/Exportieren, ...).

und Controller sollten dünne Handler sein (Eingabe-> Ausgang)

Ihre Controller -Klassen interagieren mit den Modellklassen, sie sind in der Tat dünn.

Machen Sie basierend auf der Ausgabe einige Dinge mit den Modellen ... und geben Sie eine Modellansicht an den Client zurück ...

In Wirklichkeit befürworten die PHP -Frameworks flache Modelle. CI und Symfony beispielsweise gleichsetzen Modell == orm. Sogar der HTTP -Eingang wird vom Controller behandelt und wird nicht als Modell behandelt.

Ich bin mir dieser PHP -Frameworks nicht wirklich bewusst ...

Die HTTP -Eingabe sollte jedoch behandelt werden, bevor er den Controller erreicht hat.
Sie können problemlos eine Klasse erstellen, die Daten in ein gutes Routing und Parametern umdreht und veröffentlichen.

Genau das passiert in ASP.NET MVC 2 und es ist nichts falsch daran,
Ich weiß nicht, wie das mit PHP passieren würde, aber ich denke, es wäre eng miteinander verbunden.

Sie könnten sogar die Get -und -post -Daten in ein Modell umwandeln. Das Modell könnte dafür eine Konstruktorlogik enthalten. Oder einige separate Klassen könnten zu diesem Zweck hinzugefügt werden.


Ansichten:

Problemumgehungen mit ajax reduziert, es können keine Ansichten auf Webseiten geben. PHP -Frameworks pumpen immer noch Seiten aus.

Ich verstehe nicht, warum es nicht konnte. Der einzige Unterschied ist, dass das Protokoll und PHP JSON usw. zurückgeben können ...

Eine Seite ist Ihre Ansicht und kann über Ajax + JSON anfordern und aktualisieren.
Ich bin mir dieser PHP -Frameworks jedoch nicht wirklich bewusst, aber in ASP.NET MVC 2 funktioniert es so.

Die Schnittstelle folgt immer noch effektiv dem gewöhnlichen HTTP-Modell, es gibt keinen Vorteil gegenüber Nicht-MVC-Anwendungen. (Und schließlich kann keines der weit verbreiteten PHP -Frameworks anstelle von HTML sachlich an GUI -Ansichten ausgegeben werden. Ich habe eine PHP -Bibliothek gesehen, die GTK/Konsole/Web betreiben kann, aber die Frameworks nicht.)

Der einzige Vorteil, den Sie erhalten (und das ist mit normalen Anwendungen gleich) ist die Trennung in Modell (Daten) + Ansicht (GUI) + Controller (Logik). Ähnlich sehen Sie kein C ++ - Framework, das anstelle von GUI -Ansichten sachlich an HTML oder JSON ausgegeben werden kann.


Regler:

Ich bin mir nicht sicher. Controller müssen im MVC-Modell wahrscheinlich nicht langlebig und hartnäckig aktiv sein. Im PHP -Framework -Kontext fordern sie jedoch hauptsächlich Handler an. Nicht wirklich etwas, worüber man sich argumentieren kann, aber es fühlt sich einfach etwas Schlagwort an.

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

PHP -Web -Apps arbeiten jedoch nicht mit Live -Ansichten (GUI -Elementen) und einer persistenten Controller -Laufzeit.

Nein, sie tun es sicher!

Denken Sie an Ajax -Anwendungen, dann fordert die Ansicht dem Controller etwas auf und erhält eine teilweise Ansicht zurück.
Diese Ansicht oder Daten werden dann irgendwo auf der Seite ausgefüllt und somit live aktualisiert.

Der Controller ist auch hartnäckig, 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 könnten sie als Summen verwenden, andere tun sie richtig ...
Sehen Eine Liste einiger Frameworks auf Wikipedia.

Ist MVC nur die SEO der PHP -Programmierung?

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

Meiner Meinung nach bringt die Verwendung von MVC in PHP Programmierer ins Web. Es ist einfacher, beispielsweise von Java zu PHP zu gelangen, wenn Sie wissen, wie man mit MVC arbeitet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
scroll top