63 votes

WordPress est-il conforme à la norme MVC ?

Certains considèrent WordPress comme une plateforme de blogs, d'autres comme un CMS, d'autres encore comme un cadre de développement. Quoi qu'il en soit, la question reste posée. WordPress est-il conforme à la norme MVC ?

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

J'ai peu d'expérience avec les frameworks MVC et il ne semble pas y avoir d'informations sur le framework lui-même. La plupart des MVC sont réalisés par le programmeur, n'est-ce pas ? Maintenant, pour en revenir à WordPress, pouvons-nous considérer le moteur de réécriture de base (WP_Rewrite) comme le contrôleur ? Les requêtes et la logique des plugins comme le modèle ? Et les thèmes comme la vue ? Ou est-ce que je me trompe ?

Merci ;)

46voto

user239974 Points 339

Wordpress lui-même n'est pas architecturé en MVC, mais il est possible de créer des thèmes et des plugins très orientés MVC au sein du cadre. Il existe plusieurs outils qui peuvent aider :

Solutions WordPress MVC :

Fils de discussion MVC sur WordPress.org Ideas et Trac :

24voto

Rampant Points 339

Wordpress est en quelque sorte MVC. Il s'agit plutôt d'un modèle MVC de type pull, où la vue "tire" des données du modèle. Il le fait d'une manière très procédurale, au lieu d'utiliser beaucoup d'objets différents, mais cela rend en fait les modèles frontaux plus faciles à écrire à bien des égards.

Cela confère également aux vues un certain degré de logique de contrôle (d'où l'appellation MVC).

Faisons le tour de la question : Wordpress reçoit une URL. Le noyau de Wordpress agit comme un contrôleur et détermine les requêtes initiales à exécuter dans la base de données et, par extension, la vue à charger (vue par catégorie, vue par article ou page unique, etc.) Il regroupe ensuite la réponse à cette requête INTIALE et l'envoie au fichier de vue.

Ce fichier d'affichage peut être un fichier d'affichage uniquement OU il peut demander des informations/questions supplémentaires en plus de celles qui sont intégrées. C'est le type "pull" du MVC, où la vue tire des données du modèle au lieu que le contrôleur "pousse" les données du modèle vers la vue.

Ainsi, lorsque la vue voit du code pour charger une barre latérale ou une zone de widgets, elle demande cette information. Cependant, les widgets qui devraient s'y trouver sont déterminés par le contrôleur, qui consulte le modèle pour savoir quels widgets se trouvent dans la barre latérale, puis sélectionne ceux qui sont définis pour s'afficher sur la page actuelle et les renvoie à la vue.

Le fait que chaque partie de ce système ne soit pas un objet n'enlève rien à l'approche MVC. Vous pouvez modifier le noyau de WP sans (nécessairement) modifier quoi que ce soit sur un thème. De même, tant que vous utilisez des fonctions intégrées comme 'get_pages()', le modèle et les tables de la base de données peuvent changer tant que ces fonctions renvoient 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 une logique de contrôleur pour faire plus que ce que le noyau fait normalement).

Bien qu'il soit possible d'avoir un objet modèle contenant un certain nombre de méthodes et d'éléments comme WPModel::get_pages('blah blah'), et de tout contenir de cette manière, il existe toujours une séparation fondamentale des préoccupations.

Vue : fichiers de modèles Contrôleur : Noyau de WP Modèle : les différentes fonctions qui gèrent la manipulation de données spécifiques.

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

Il ne s'agit pas d'une version ultra-propre de MVC (surtout lorsque des crochets sont utilisés), mais c'est le point de départ d'un niveau de base.

Et être procédurier à ce sujet n'est pas une mauvaise chose. Une requête provenant d'un site web est assez intrinsèquement procédurale : c'est un processus avec un début et une fin clairs, et qui nécessite juste une procédure pour traiter la requête, obtenir des données, les empaqueter, puis mourir. Vous pouvez mettre en place ces étapes avec des objets, des méthodes d'objets et des modèles de POO (ce qui rendrait certaines choses plus faciles) ou vous pouvez simplement écrire beaucoup d'appels de fonctions et les séparer de cette façon. Les membres de la classe comme les variables privées sont perdus de cette façon, mais selon les besoins de l'application... vous pouvez ne pas vous en soucier.

Il n'existe pas de méthode unique de développement, et WP est présent sur environ 20 % des sites web, ce qui signifie qu'il fait quelque chose de bien. Probablement quelque chose à voir avec le fait de 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 sont les pages enfants de la page x ?" et traite ces données. Pourriez-vous le faire aussi facilement avec la POO ? oui, mais si Joomla est un exemple de la difficulté de mettre en œuvre un site web personnalisé complexe avec la POO, alors WP est beaucoup plus facile et rapide, et le temps c'est de l'argent.

9voto

Daff Points 22358

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

Il y a une séparation des vues (modèles) de la logique de programmation, mais seulement dans le front-end, pas dans le panneau d'administration et une séparation générale des vues et de la logique d'application n'est pas inévitablement MVC. Une mise en œuvre du modèle MVC suppose généralement un certain type de paradigme de programmation orienté objet et Wordpress est un système MVC. principalement mis en œuvre de manière procédurale, avec des requêtes SQL simples dans les fonctions PHP, et ne disposant donc pas non plus d'un modèle réel.

5voto

Dave Amphlett Points 579

Je tiens à mettre à jour cette page avec des informations plus récentes pour les personnes qui consultent cette page à partir de moteurs de recherche - le plugin wp-mvc. http://wordpress.org/extend/plugins/wp-mvc/ contribue grandement à la création d'un cadre mvc pour le développement de plugins. Vous pouvez en savoir plus ici : http://wpmvc.org/documentation/70/tutorial/

4voto

Brian Zeligson Points 124

Juste pour ajouter à la liste des options, (je suis certes partial en tant qu'auteur,) swpMVC est un framework MVC léger et complet, inspiré de Rails, Sinatra, Express et FuelPHP. Il est minutieusement documenté, et bien que j'aie utilisé et apprécié wp-mvc Je voulais quelque chose où les modèles soient capables de remplir eux-mêmes les vues, y compris les contrôles de formulaires pour interagir avec lesdits modèles.

J'ai créé ce système en grande partie pour réduire la quantité de code de contrôleur nécessaire pour mettre en place une application au-dessus de WordPress, et le résultat est un cadre très rapide et efficace qui fonctionne 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, notamment 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 pris beaucoup de plaisir à travailler avec ce framework jusqu'à présent.

Il est également livré avec underscore PHP et PHP Quick Profiler (comme vu dans FuelPHP).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X