web-dev-qa-db-fra.com

WordPress MVC est-il conforme?

Certaines personnes considèrent WordPress comme une plateforme de blogs, d'autres le considèrent comme un CMS, d'autres se réfèrent à WordPress comme un cadre de développement. Quoi qu'il en soit, la question demeure. WordPress MVC est-il conforme?

J'ai lu les forums et quelqu'un a posé des questions sur MVC il y a environ trois ans. Il y avait des réponses positives et des réponses négatives. Bien que personne ne sache exactement ce qu'est MVC et que chacun y pense à sa manière, un concept général est toujours présent dans toutes les discussions.

J'ai peu d'expérience avec les frameworks MVC et il ne semble rien y avoir à propos du framework lui-même. La majeure partie du MVC est réalisée par le programmeur, n'est-ce pas? Revenons maintenant à WordPress. Pouvons-nous considérer le contrôleur principal (WP_Rewrite) comme moteur de réécriture? La logique des requêtes et des plugins en tant que modèle? Et des thèmes comme la vue? Ou est-ce que je me trompe complètement?

Merci ;)

63
kovshenin

Wordpress lui-même n'est pas architecturé dans MVC, mais on peut construire des thèmes et des plugins très orientés MVC dans le cadre. Il existe plusieurs outils qui peuvent aider:

Solutions WordPress MVC:

Sujets MVC sur WordPress.org Ideas and Trac:

46
user239974

Wordpress est un peu comme MVC. En réalité, il s’agit d’une disposition MVC de type extrait, dans laquelle la vue extrait les données du modèle. Cela se fait de manière très procédurale, au lieu d'utiliser beaucoup d'objets différents, mais cela rend en réalité les modèles frontaux plus faciles à écrire de nombreuses façons.

Cela donne également aux vues un certain degré de logique de contrôleur (donc le type de MVC).

Permet d'exécuter ceci: Wordpress obtient une URL. Le wordpress core agit en tant que contrôleur et détermine les requêtes initiales à exécuter de la base de données et, par extension, la vue à charger (vue des catégories, publication unique ou vue de page, etc.). Il conditionne ensuite cette réponse de requête INTIAL et l'envoie au fichier de vue.

Ce fichier de vue PEUT être un fichier à affichage strict seulement OR, il peut demander des informations/requêtes supplémentaires au-delà du fichier intégré. Il s'agit du type d'extraction du MVC, dans lequel la vue extrait les données du modèle au lieu du contrôleur "poussant" les données du modèle dans la vue. 

Ainsi, lorsque la vue voit du code pour charger une barre latérale ou une zone de widget, elle demande cette information. Cependant, le contrôleur détermine le type de widgets à utiliser, puis examine le modèle pour identifier les widgets figurant dans la barre latérale, puis sélectionne ceux qui sont configurés pour s'afficher sur la page actuelle et les renvoie à la vue.

Que chaque partie de cela ne soit pas un objet ne rend pas cela moins MVC. Vous pouvez modifier le noyau WP sans modifier (nécessairement) quoi que ce soit sur un thème. De même, tant que vous utilisez des fonctions intégrées telles que 'get_pages ()', le modèle et les tables de la base de données peuvent changer aussi longtemps que ces fonctions renvoient toujours les bonnes données. Ainsi, le modèle est indépendant de la vue et le contrôleur est également indépendant (sauf lorsque la vue ajoute la logique du contrôleur pour en faire plus que le cœur ne le fait normalement). 

Bien que vous puissiez avoir un objet modèle contenant un certain nombre de méthodes et d'éléments comme WPModel :: get_pages ('blah blah') et tout contenir de cette façon, il existe toujours une séparation fondamentale des préoccupations.

Vue: fichiers de modèle Contrôleur: WP core Modèle: les différentes fonctions qui gèrent le traitement de données spécifique.

Tant que les noms, arguments, etc. restent les mêmes (ou que de nouveaux en sont ajoutés), la séparation des préoccupations est conservée et l'une peut être modifiée sans perturber les autres.

Ce n'est pas une version très propre de MVC (surtout lorsque des hooks sont impliqués), mais à un niveau basique, cela commence là. 

Et être procédural à ce sujet n'est pas une mauvaise chose, OMI. Une demande émanant d'un site Web est par nature assez procédurale: il s'agit d'un processus dont le début et la fin sont clairs et qui nécessite simplement une procédure permettant de traiter la demande, d'obtenir les données, de les empaqueter, puis de mourir. Vous pouvez configurer ces étapes avec des objets et des méthodes d'objet et des dispositions OOP (ce qui faciliterait certaines choses) ou vous pouvez simplement écrire beaucoup d'appels de fonction et les séparer de cette façon. Les membres de classe, comme les variables privées, sont perdus de cette façon, mais en fonction des besoins de l'application, vous vous en fichez.

Il n’existe pas de solution unique pour le développement, et WP possède 20% des sites Web, ce qui signifie qu’il fait quelque chose de bien. Probablement quelque chose à voir avec ne pas obliger les gens à apprendre/mémoriser des hiérarchies de classes complexes pour que la base de données réponde à la question 'Quelles pages sont les enfants de la page x?' et traiter avec ces données. Pourriez-vous rendre cela aussi facile avec la POO? Oui, mais si Joomla est un exemple de la difficulté avec laquelle il est difficile de mettre en œuvre un site Web personnalisé complexe avec la POO, alors WP est beaucoup plus facile et plus rapide, et le temps, c'est de l'argent.

24
Rampant

Comme déjà mentionné dans les commentaires, MVC est un modèle de conception architecturale et non un cadre spécifique. Non, Wordpress ne suit pas le modèle MVC.

Il existe une séparation des vues (modèles) de la logique de programmation, mais uniquement dans l'interface, pas dans le panneau d'administration, et une séparation générale des vues et de la logique d'application n'est pas forcément MVC. Une implémentation du modèle MVC suppose généralement une sorte de paradigme de programmation orienté objet et Wordpress est principalement implémenté de manière procédurale, avec des requêtes SQL simples dans les fonctions PHP, ne disposant donc pas de modèle non plus.

9
Daff

L’idée de WordPress et de MVC est l’un des sujets abordés régulièrement dans les discussions concernant WordPress.

Mais le fait est que MVC n’est pas la solution miracle du développement Web que nous essayons de faire valoir. Oui, c’est un modèle de conception génial, et j’ai personnellement le sentiment qu’il s’adapte parfaitement au modèle d’application Web, mais tous les cadres et toutes les plates-formes n’implémentent pas ce modèle de conception.

Exemple: WordPress n'est pas MVC.

Et ça va. Je pense que nous devons laisser de côté le désir d’essayer de le faire entrer dans nos projets, en particulier lorsque le modèle fourni par WordPress est non seulement suffisant, mais qu'il fonctionne bien lorsqu'il est utilisé correctement.

"Mais j'aime MVC!"

Moi aussi! En fait, j'ai passé la dernière année à travailler sur un projet qui imitait plus ou moins l'architecture MVC ... Un exemple de haut niveau de MVC.

enter image description here

Un exemple de haut niveau de MVC.

Par exemple:

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.

Enfin, un ensemble de règles de réécriture a donné à l'application un ensemble propre d'URL prévisibles au format/people/update/1 ou /people/all.Quel modèle WordPress implémente-t-il?

WordPress implémente l'architecture pilotée par les événements (dont il existe plusieurs variantes telles que le modèle Observer).

En bref, vous pouvez conceptuellement penser à ceci comme suit:

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

Pas trop compliqué, n'est-ce pas? Un exemple de haut niveau de modèles événementiels enter image description here Un exemple de haut niveau de modèles événementiels

Lorsque vous commencez à penser en termes de paradigme dans lequel cela fonctionne plutôt que d'essayer de le faire fonctionner comme vous le souhaitez, cela libère. Cela aide à résoudre les problèmes beaucoup plus facilement.

La ligne de fond est la suivante: WordPress implémente le modèle de conception piloté par les événements. Ainsi, même si vous essayez d’implémenter MVC, vous devrez toujours utiliser le système de hook.

Si vous ne faites pas attention, vous pouvez essayer de concevoir l'architecture parfaite sans faire votre travail et ainsi vous retrouver si haut dans l'atmosphère du logiciel que vous êtes effectivement devenu un astronaute de l'architecture. Donc, vous dites éviter les modèles de conception?

Pas du tout! Les motifs de conception ont une fonction, car ils nous apportent avant tout des solutions aux problèmes précédemment résolus et généralement résolus. Utilise les!

Mais ce que j’essaie de dire, c’est que nous n’avons pas besoin d’essayer de forcer les choses à s’adapter à un modèle simplement parce que nous l’aimons. Ce n’est pas leur but. Au lieu de cela, exploitez le modèle principal mis en œuvre par votre plate-forme choisie - dans notre cas, il s’agit d’un modèle basé sur les événements - puis implémentez les modèles qui s’y adaptent (comme l’injection de dépendance ou quelque chose du genre).

Sinon, c’est comme essayer de mettre son pied dans un gant.

Courtoisie (et totalement copiée: P) de: http://tommcfarlin.com/wordpress-and-mvc/

5

Juste pour mettre à jour cela avec des informations plus récentes sur les moteurs de recherche, le plugin wp-mvc http://wordpress.org/extend/plugins/wp-mvc/ fait beaucoup pour créer un framework mvc pour le développement de plugins. Vous pouvez en savoir plus ici: http://wpmvc.org/documentation/70/tutorial/

5
Dave Amphlett

Juste pour ajouter à la liste des options, swpMVC est un framework MVC léger et complet, inspiré de Rails, Sinatra, Express et FuelPHP. C'est parfaitement documenté, et bien que j'aie utilisé et apprécié wp-mvc , je voulais quelque chose pour que les modèles puissent remplir eux-mêmes des vues, y compris des contrôles de formulaire pour interagir avec lesdits modèles. 

C’est pourquoi, dans une large mesure, nous avons réduit la quantité de code de contrôleur nécessaire à la création d’une application au-dessus de WordPress. Le résultat est un cadre très rapide et efficace qui s’exécute dans WordPress. Les modèles sont basés sur PHP Activerecord et 8 modèles sont inclus pour les types de données WordPress existants, y compris Post, PostMeta, User, UserMeta, Term, et quelques autres. La modélisation des données est très facile grâce à la bibliothèque activerecord, et j'ai beaucoup aimé travailler avec ce framework jusqu'à présent.

Livré également avec des traits de soulignement PHP et PHP Quick Profiler (comme dans FuelPHP.)

4
Brian Zeligson

RokkoMVC est un framework micro MVC spécialement conçu pour WordPress. Le projet vise à simplifier la fonctionnalité AJAX dans les applications WordPress, ainsi qu'à apporter tous les autres avantages de l'utilisation de modèles, de vues et de contrôleurs pour votre thème.

2
rodrigo-silveira

J'ai récemment eu l'occasion de créer un plug-in utilisant un système de contrôleur de vue simple et j'ai bien aimé les résultats. J'ai donc séparé le contenu du modèle vers son propre référentiel . Il propose des contrôleurs basés sur des objets, transmettant localement des variables à des modèles PHP, des fragments de modèle (modèles dans des modèles) et des composants (fragments de modèle avec leur propre sous-contrôleur). Le tout dans deux petites classes!

Bien sûr, j’ai écrit ce code en pensant qu’aucun autre développeur WP n’avait pris en compte le problème avant le ;-).

1
halfer

C'est loin d'être mvc, il n'y a pas grand chose à dire, comme certaines personnes le disent, c'est MVC ou pas ... Le fait que vous écriviez une logique au niveau de la vue ne le qualifie pas comme un framework mvc. La raison pour laquelle les gens l'utilisent - c'est facile à apprendre, vous n'avez pas besoin d'être programmeur PHP hardcore, ils sont paresseux.

0
lokers