web-dev-qa-db-fra.com

Quelqu'un peut-il m'aider à comprendre MVC?

J'ai lu quelques articles sur le modèle MVC et j'ai essayé de comprendre ce que c'est exactement. Mais jusqu'à présent, ce que je reçois est un diagramme uni montrant 3 modules de modèle, vue et contrôleur. Certains disent qu'il aide à augmenter la réutilisation du code (sec), alors que je pense que cela fait le contraire.

Je séparais actuellement mon code d'application en différents répertoires, une pour la visualisation de la pièce (présentation: HTML/CSS/JS + CLIENT NOTE REQ) et l'autre pour les fonctions liées à la base. Je n'ai trouvé aucun inconvénient à cette approche. Peut-être parce que je n'ai pas encore développé de grosses applications, juste de petits loisirs.

Donc, à part cette séparation, ce que je trouve en MVC, c'est une sorte de réécriture de l'URL, que je pense être atteinte si nécessaire. Y a-t-il quelque chose que je manque? Il doit y avoir une raison pour laquelle les développeurs sont tellement enclins au motif MVC.

10
Abhinav Gauniyal

Je vais essayer d'expliquer cela avec un exemple.

Disons que vous voulez construire un site Web qui montre aux personnes une liste d'amis. Donc, cela commence par une liste de vos amis (A, B, C ..). Lorsque vous en sélectionnez un, il affiche une liste de leurs amis (A1, A2, etc.) et ainsi de suite.

La "vue" est une implémentation de ce que l'utilisateur peut voir. Dans ce cas, nous n'avons besoin que d'une vue, c'est-à-dire une table pour montrer une liste de personnes. La vue ne se soucie pas de qui ces personnes sont, d'où elles sont venues ou comment elles sont liées. Il affiche simplement une liste de personnes et relie toutes les actions utilisateur (clics, etc.) au contrôleur.

Le modèle a une liste de personnes et de leurs relations. Cela ne sait pas quoi faire avec eux ou comment une action sur la vue les affecte. Il a simplement une liste de personnes.

C'est le travail du contrôleur de "prendre une liste de personnes et la donner à l'affichage". Lorsqu'un utilisateur clique sur une personne, la vue relie cette action au contrôleur, le contrôleur examinera le modèle pour les relations pour cette personne et extraire une nouvelle liste de personnes, qu'elle donnera ensuite à la vue d'affichage et bientôt.

J'espère que vous pourrez voir comment ce type d'architecture serait bénéfique dans les grands projets. Il simplifie grandement le code, favorise la réutilisation (je peux utiliser la même vision pour afficher une liste des objets "personnes") et facilite la modification d'un aspect du projet (données ou interface utilisateur) sans affecter l'autre.

12
user1349663

L'idée est simplement de créer une séparation claire entre la logique commerciale et l'interface utilisateur.

Le modèle est les données et la logique commerciale de l'application. La vue est une logique UI et crée une représentation visuelle du modèle. Le contrôleur est enceinte entre les deux pour les maintenir vaguement couplés.

Voici un exemple pour vous aider à comprendre. Cela concerne plus sur le MVC de bureau, pas Web MVC, mais l'idée générale est la même:

Imaginez une application de traitement de texte. L'utilisateur vient de sélectionner du texte et appuyé sur le bouton 'Bold'.

La vue sait qu'un bouton a été enfoncé, mais ne doit pas (et ne devrait pas) savoir comment gérer cet événement. Donc, il notifie le contrôleur (E.G. controller.boldPressed()).

Le contrôleur "sait" ce que cela signifie pour le modèle. Parfois, cela signifierait simplement model.makeTextBold(), et parfois cela signifierait quelque chose de plus complexe, tel que d'abord récupérer le texte sélectionné de la vue, puis effectuant plusieurs appels de méthodes sur le modèle.

Le modèle reçoit ensuite les appels de méthode du contrôleur et effectue les actions souhaitées, c'est-à-dire une pièce de texte audacieuse. Notez que le texte est conservé dans le modèle - C'est là que les données sont conservées. La vue est simplement une représentation visuelle de ces données, c'est-à-dire une représentation visuelle du modèle.

À la dernière étape, il faut notifier que l'état du modèle a changé, il peut donc se mettre à jour (c'est une représentation visuelle du modèle). Ceci est souvent fait via le motif observateur (apprenez-le si vous ne le connaissez pas). Ou, cela peut être fait par le contrôleur.

La vue est notifiée que le modèle a changé et se met à jour. Et nous avons eu un texte audacieux.

C'est l'idée. Comme vous pouvez le constater, la vue ne sait rien sur la manière dont le modèle fonctionne, et plus important encore, le modèle ne sait rien à propos de la vue. Cet accouplement lâche facilite la maintenance des choses, car vous n'avez pas la logique d'entreprise dans vos manutentionnaires d'événements UI et aucune connaissance intime de l'interface utilisateur de votre logique professionnelle. Et cela peut même dire que vous pouvez remplacer différentes vues ou modèles avec des modifications minimales aux autres parties du système.

Une dernière chose: Notez que parfois le contrôleur peut se sentir inutile, comme tout ce qu'il fait, c'est passer des appels de méthode au modèle. Dans de petites applications, ce sera souvent le cas. Mais il est toujours bon d'avoir cette couche de séparation, au cas où l'application est plus grande.

J'espère que cela t'aides.

2
Aviv Cohn

J'ai appris à ce sujet une fois mais pas d'un livre .. Mais j'espère que cela n'est pas inexact.

MVC signifie modèle, vue, contrôleur.

La vue est l'interface graphique

Le modèle est la plupart de votre programme et le contrôleur fait partie de votre programme qui interface entre votre modèle et votre gui/vue.

Le bénéfice à cela est que par exemple. S'il y a un changement soudain des exigences et une nouvelle interface graphique est requise, alors lorsque vous avez séparé votre programme dans ces composants, il vous suffit de changer un composant. La partie modèle du programme n'aura pas à être réécrite ou modifiée. (Peut-être que le contrôleur aura besoin d'un peu d'amendement, mais pas beaucoup). Et vous vous concentrez simplement sur l'écriture de la partie de vue. Votre programme est donc conçu pour avoir des vues différentes.

De plus, si vous deviez structurer votre programme différemment, en termes de fonctionnement des données, vous n'auriez pas à réécrire le code décrivant l'interface graphique.

0
barlop