it-swarm.com.de

Ist WordPress MVC kompatibel?

Einige Leute betrachten WordPress als Blogging-Plattform, andere betrachten es als CMS, andere bezeichnen WordPress als Entwicklungsframework. Was auch immer es ist, die Frage bleibt immer noch. Ist WordPress MVC kompatibel?

Ich habe die Foren gelesen und vor etwa drei Jahren hat jemand nach MVC gefragt. Es gab einige positive und einige negative Antworten. Während niemand genau weiß, was MVC ist und jeder auf seine Weise denkt, gibt es immer noch ein allgemeines Konzept in allen Diskussionen.

Ich habe wenig Erfahrung mit MVC-Frameworks und es scheint nichts über das Framework selbst zu geben. Der Großteil der MVC wird vom Programmierer ausgeführt, habe ich recht? Nun, zurück zu WordPress, könnten wir die Controller-Kernumschreib-Engine (WP_Rewrite) als Controller betrachten? Abfragen und Plugin-Logik als Modell? Und Themen als Ausblick? Oder verstehe ich alles falsch?

Vielen Dank ;)

63
kovshenin

Wordpress selbst ist in MVC nicht archiviert, aber man kann sehr MVC-orientierte Designs und Plugins innerhalb des Frameworks erstellen. Es gibt mehrere Tools, die helfen können:

WordPress MVC-Lösungen:

MVC-Threads auf WordPress.org Ideas und Trac:

46
user239974

Wordpress ist irgendwie eine Art MVC. Wenn überhaupt, handelt es sich um ein MVC-Layout vom Pull-Typ, bei dem die Ansicht Daten aus dem Modell "zieht". Dies geschieht auf sehr fortschrittliche Weise, anstatt viele verschiedene Objekte zu verwenden. Dies macht es jedoch tatsächlich einfacher, die Front-End-Vorlagen in vielerlei Hinsicht zu schreiben.

Dies gibt den Ansichten auch einen gewissen Grad an Controller-Logik (also irgendwie die Art MVC).

Lassen Sie uns dies ausführen: Wordpress erhält eine URL. Der WordPress-Core fungiert als Controller und bestimmt, welche anfänglichen Abfragen von der Datenbank ausgeführt werden sollen und welche Erweiterungen zu laden sind (Kategorieansicht, Einzelpost- oder Seitenansicht usw.). Anschließend wird die Antwort der INTIAL-Abfrage verpackt und an die Ansichtsdatei gesendet.

Diese View-Datei kann eine strikte Nur-Anzeige-Datei OR sein. Sie kann zusätzliche Informationen/Abfragen über das integrierte hinaus anfordern. Dies ist der Pull-Typ des MVC, bei dem die Ansicht Daten aus dem Modell abruft, anstatt dass der Controller Daten aus dem Modell in die Ansicht "schiebt". 

Wenn also in der Ansicht Code zum Laden einer Seitenleiste oder eines Widgetbereichs angezeigt wird, werden diese Informationen abgefragt. Welche Widgets dort sein sollten, wird jedoch vom Controller bestimmt, der im Modell nach den Widgets in der Seitenleiste sucht und dann diejenigen auswählt, die auf der aktuellen Seite angezeigt werden sollen, und diese der Ansicht zurückgeben.

Dass jeder Teil davon kein Objekt ist, macht dies nicht weniger MVC. Sie können den WP -Kern ändern, ohne (notwendigerweise) etwas an einem Thema zu ändern. Solange Sie integrierte Funktionen wie 'get_pages ()' verwenden, können sich das Modell und die Datenbanktabellen ändern, solange diese Funktionen noch die richtigen Daten zurückgeben. Das Modell ist also unabhängig von der Ansicht, und der Controller ist ebenfalls unabhängig (außer wenn die Ansicht Controllerlogik hinzufügt, um mehr zu tun, als der Kern normalerweise tut). 

Während Sie ein Modellobjekt mit einer Reihe von Methoden und so etwas wie WPModel :: get_pages ('bla bla') haben KÖNNEN und alles auf diese Weise enthalten könnten, gibt es immer noch eine grundlegende Trennung der Bedenken.

Ansicht: Vorlagendateien Controller: WP Kern Modell: Die verschiedenen Funktionen, die mit der Datenverarbeitung umgehen.

Solange die Namen, Argumente usw. gleich bleiben (oder nur neue hinzugefügt werden), wird die Trennung der Anliegen beibehalten, und eines kann geändert werden, ohne die anderen zu stören.

Es ist keine Super-Clean-Version von MVC (vor allem, wenn Hooks involviert sind), aber auf einer grundlegenden Ebene beginnt es dort. 

Und es ist keine schlechte Sache, IMO darüber zu reden. Eine Anfrage von einer Website ist ziemlich inhärent prozedural: Es ist ein Prozess mit klarem Anfang und Ende und benötigt lediglich eine Prozedur, um die Anfrage zu bearbeiten, Daten abzurufen, zu verpacken und dann zu sterben. Sie können diese Schritte mit Objekten und Objektmethoden und OOP -Layouts einrichten (was einige Dinge einfacher machen würde), oder Sie können einfach eine Vielzahl von Funktionsaufrufen schreiben und auf diese Weise trennen. Klassenmitglieder wie private Variablen gehen auf diese Weise verloren, aber abhängig von den Anforderungen der Anwendung ... ist es Ihnen vielleicht egal.

Es gibt keinen One-Grand-Weg für die Entwicklung, und WP liegt bei etwa 20% der Websites, sodass etwas richtig gemacht wird. Wahrscheinlich etwas damit zu tun, dass die Leute keine komplexen Klassenhierarchien lernen müssen, damit die Datenbank die Frage beantworten kann, welche Seiten von Seite x untergeordnet sind? und mit diesen Daten umgehen. Könnten Sie es mit OOP so einfach machen? Ja, aber wenn Joomla ein Beispiel dafür ist, wie schwierig es ist, eine komplexe benutzerdefinierte Website mit OOP zu implementieren, ist WP viel einfacher und schneller und Zeit ist Geld.

24
Rampant

Wie bereits in den Kommentaren erwähnt, handelt es sich bei MVC um ein architektonisches Entwurfsmuster, nicht um ein spezifisches Framework, und nein, Wordpress folgt nicht dem MVC-Muster.

Es gibt eine Trennung von Ansichten (Vorlagen) von der Programmierlogik, jedoch nur im Frontend, nicht im Admin-Panel, und eine generelle Trennung von Ansichten und Anwendungslogik ist nicht zwangsläufig MVC. Eine Implementierung des MVC-Musters setzt normalerweise eine Art objektorientiertes Programmierparadigma voraus, und Wordpress ist hauptsächlich prozedural implementiert, wobei einfache SQL-Abfragen in den PHP - Funktionen vorliegen und daher kein Modell vorhanden ist entweder.

9
Daff

Eines der Themen, das regelmäßig in Diskussionen zu WordPress auftaucht, ist die Idee von WordPress und MVC.

Die Sache ist jedoch, dass MVC nicht die Silberweste der Webentwicklung ist, die wir zu erreichen versuchen. Ja, es ist ein fantastisches Designmuster, und ich persönlich denke, dass es wie ein Handschuh zum Webanwendungsmodell passt, aber nicht jedes Framework oder jede Plattform implementiert dieses Designmuster.

Ein typisches Beispiel: WordPress ist keine MVC.

Und das ist okay. Ich denke, wir müssen den Wunsch nach Versuchen, es in unseren Projekten zu zeigen, beiseite lassen, insbesondere wenn das von WordPress bereitgestellte Muster nicht nur ausreichend ist, sondern auch gut funktioniert, wenn es richtig eingesetzt wird.

"Aber ich liebe MVC!"

Ich auch! Tatsächlich habe ich das letzte Jahr an einem Projekt gearbeitet, das die MVC-Architektur mehr oder weniger nachahmte. Ein hochrangiges Beispiel für MVC.

enter image description here

Ein High-Level-Beispiel für MVC.

Zum Beispiel:

Views were implemented using templates
Controllers were implemented by a combination of using function names like create, read, update, destroy, delete, and so on (even though these functions were hooked into the WordPress API
Models were functions also were called to validate and verify data prior to serializing the data. Again, this required that certain functions be hooked into WordPress to achieve the desired result.

Schließlich gab eine Reihe von Umschreibungsregeln der Anwendung einen sauberen Satz vorhersagbarer URLs im Format/people/update/1 oder /people/all.Welches Muster implementiert WordPress?

WordPress implementiert die ereignisgesteuerte Architektur (von der es verschiedene Variationen wie das Observer Pattern gibt).

Kurz gesagt, Sie können sich dies konzeptuell wie folgt vorstellen:

Things happen when WordPress is processing information.
You can register your own function to fire when these things happen.

Nicht zu kompliziert, nicht wahr? Ein übergeordnetes Beispiel ereignisgesteuerter Muster enter image description here.__ Ein übergeordnetes Beispiel für ereignisgesteuerte Muster

Wenn Sie anfangen, in Bezug auf das Paradigma zu denken, in dem es funktioniert, anstatt zu versuchen, es so zu gestalten, wie Sie es möchten, ist es befreiend. Es hilft, Probleme viel einfacher zu lösen.

Die Quintessenz lautet: WordPress implementiert das ereignisgesteuerte Entwurfsmuster. Selbst wenn Sie versuchen, MVC zu implementieren, müssen Sie immer noch das Hook-System verwenden.

Wenn Sie nicht vorsichtig sind, können Sie am Ende versuchen, die perfekte Architektur zu erstellen, ohne Ihre Arbeit tatsächlich zu erledigen, und sich so in der Atmosphäre von Software befinden, dass Sie tatsächlich ein Architektur-Astronaut geworden sind. .So sagen Sie, vermeiden Sie Entwurfsmuster?

Überhaupt nicht! Design Patterns dienen einem Zweck, da sie uns vor allem Lösungen für zuvor und häufig gelöste Probleme bieten. Benutze sie!

Aber der Punkt, den ich zu sagen versuche, ist, dass wir nicht zwingen müssen, dass die Dinge zum Muster passen, nur weil uns das Muster gefällt. Das ist nicht ihr Zweck. Nutzen Sie stattdessen das primäre Muster, das Ihre bevorzugte Plattform implementiert - in unserem Fall ist es ein ereignisgesteuertes Muster - und implementieren Sie dann Muster, in die sie passen (z. B. Abhängigkeitsinjektion oder ähnliches).

Ansonsten ist es so, als würde man versuchen, den Fuß in einen Handschuh zu stecken.

Höflichkeit (und vollständig kopiert: P) von: http://tommcfarlin.com/wordpress-and-mvc/

5

Um dies mit aktuelleren Informationen für Personen zu aktualisieren, die von Suchmaschinen aus angegriffen werden - das Plug-In wp-mvc http://wordpress.org/extend/plugins/wp-mvc/ macht einen großen Beitrag zur Erstellung eines MVC-Frameworks für die Plugin-Entwicklung. Weitere Informationen finden Sie hier: http://wpmvc.org/documentation/70/tutorial/

5
Dave Amphlett

Nur um die Liste der Optionen hinzuzufügen, (ich bin zwar als Verfasser voreingenommen) swpMVC ist ein voll ausgestattetes, leichtes MVC-Framework, das von Rails, Sinatra, Express und FuelPHP inspiriert ist. Es ist ausführlich dokumentiert, und obwohl ich wp-mvc verwendet und es genossen habe, wollte ich etwas, wo die Modelle Ansichten auffüllen konnten, einschließlich Formularsteuerelemente für die Interaktion mit diesen Modellen. 

Ich habe dies weitgehend zusammengestellt, um die Menge an Controller-Code zu reduzieren, die erforderlich ist, um eine App auf WordPress zusammenzustellen. Das Ergebnis ist ein sehr schnelles und effektives Framework, das in WordPress ausgeführt wird. Die Modelle basieren auf PHP Activerecord und es sind 8 Modelle für vorhandene WordPress-Datentypen enthalten, darunter Post, PostMeta, User, UserMeta, Term und einige andere. Die Modellierung von Daten ist dank der Activerecord-Bibliothek sehr einfach. Ich habe es bisher sehr genossen, mit diesem Framework zu arbeiten.

Wird auch mit Unterstrich PHP und PHP Quick Profiler geliefert (wie in FuelPHP zu sehen.)

4
Brian Zeligson

RokkoMVC ist ein speziell für WordPress entwickeltes Micro-MVC-Framework. Das Projekt soll die AJAX -Funktionalität in WordPress-Anwendungen vereinfachen und alle anderen Vorteile der Verwendung von Modellen, Ansichten und Controllern für Ihr Design nutzen.

2

Ich hatte vor kurzem eine Bash beim Erstellen eines Plugins, das ein einfaches View-Controller-System verwendet, und die Ergebnisse waren sehr zufriedenstellend. Daher habe ich das Template-Zeug auf sein eigenes Repo aufgeteilt. Es bietet objektbasierte Controller, die Variablen lokal an PHP - Vorlagen, Vorlagenfragmente (Vorlagen innerhalb von Vorlagen) und Komponenten (Vorlagenfragmente mit eigenem Subcontroller) übergeben. Alles in zwei winzigen Klassen!

Natürlich habe ich diesen Code geschrieben und dachte dabei, dass kein anderer WP - Entwickler das Problem vor ;-) berücksichtigt hatte.

1
halfer

Es ist alles andere als mvc, es gibt keine Sorte, wie manche Leute sagen, es ist entweder MVC oder nicht ... Die Tatsache, dass Sie Logik auf der Ansichtsebene schreiben, qualifiziert es nicht als MVC-Framework. Der Grund, warum die Leute es verwenden - es ist einfach zu lernen, Sie müssen kein Hardcore-Programmierer sein, sie sind faul.

0
lokers