Bonjour tout le monde.
Depuis le temps que j'entends parler de MVC autour de moi et avec l'arrivée du ZendFramework, j'ai décidé de me mettre sérieusement à utiliser le modèle MVC afin de coder mon prochain site. Mais j'ai quelques soucis de compréhension concernant la partie Model et la partie Controller, les définitions que j'ai pu glaner sur le net n'était pas des plus explicites.
Afin de mieux comprendre, je souhaiterais partir d'un projet concret: Un wiki extremement basique.
Spécification du wiki:
- Une page est identifiée par un nom unique (lettres et chiffres, sans espace), elle a un auteur, une date de création, le nom du dernier auteur a l'avoir modifiée, la date de modification et peut comporter 0 à n commentaires
- un commentaire n'est pour qu'une seule et unique page, il a une date de création
- un auteur est défini par un login et un mot de passe
Fonctionnalités:
- affichage d'une page + commentaires associés + formulaire d'ajout de commentaire
- permet la modification d'une page
- identification des auteurs
Voila, bon, rien d'extraordinaire, je dirais meme, c'est le stricte minimum pour un wiki.
Maintenant voila ce que je ferais d'après ce que j'ai compris du MVC... mais comme je me doute que je dois me tromper, c'est pour ca que je vous le soumé pour que vous me donniez vos avis.
MODEL
Pour moi le Model, c'est "un objet".
En l'occurence, là, je ferais un objet pour page, un autre pour commentaire et enfin un 3eme pour user.
C'est la que je gérerais les différentes actions qu'on peut y faire.
Page (add, update, get)
Comment (add, get)
User(add, get)
Bon, en réalité, ca serait certainement un peu plus poussé, genre pour Page, y'aurais certainements une fonction pour avoir chaque type d'info, le titre, le contenu, les dates, l'auteur, un truc pour savoir combien y'a de commentaires, etc...
CONTROLLER
Pour moi, le controller est un peu le chef d'orchestre. Bon déjà y'a le FrontController qui dispatch ce que l'utilisateur à envoyé comme info pour aller chercher le bon controller. Une fois qu'on est dans le bon controller, d'après ce que j'en ai compris, c'est lui qui va instancier des models, faire les calculs, les traitements, etc.... puis enfin, appeler la view qui-va-bien
Dans ce cas présent je ferais les choses comme ca:
PageController:
- view: récupère le contenu de la page et les différents commentaires de la base
- edit: récupère le contenu de la page de la base
- add: récupère les données du formulaire pour les insérer en base
CommentController:
- add: récupère les données du formulaire pour les insérer en base
UserController:
- login: récupère les données du formulaire pour les tester avec les données de la base
VIEW
La vue, je dirais que c'est la partie la plus simple. C'est ni plus ni moins qu'un template. Ca récupère les données que lui envoit le controller pour les afficher (bon en fait, je serais tenté de dire que c'est pas tout a fait exact parce que la vue, ca pourrait aussi etre la vue d'un serveur xml-rpc, donc ca n'affiche rien, ca ne fait qu'envoyer des données formattées, en fait..)
Voila, ma vision des choses:
- page_view: affiche contenu de la page + différents commentaires + formulaire d'ajout d'un commentaire
- page_edit: affiche un formulaire pour modifier le contenu de la page
- user_login: affiche un formulaire de connexion pour que l'user s'identifie
- éventuellement différentes vue pour avoir un ensemble homogene tel que header, footer, menu, etc...
CONCLUSION ?
Résultat des courses? je me fourvoie completement?