L'utilisateur interagit avec la vue , mais la vue doit communiquer les actions au contrôleur . Le contrôleur peut mettre à jour le modèle , mais cela n'est pas requis à chaque changement.
La description que je fournis est basée sur mon expérience personnelle avec l'implémentation .NET de MVC. Votre implémentation peut être différente.
Le contrôleur est l'endroit où les actions sont traitées, essentiellement une couche métier. Un simple contrôleur ne fera rien de plus que d'obtenir les données du modèle pour les alimenter dans la vue. Un contrôleur compliqué effectuera toutes sortes d'actions, jusqu'à la gestion de la sécurité, l'authentification, l'autorisation, l'enregistrement et peut-être bien d'autres choses.
La vue ne doit être responsable que de l'affichage des informations d'une manière que l'utilisateur peut comprendre. Il peut y avoir un croisement ici avec le contrôleur et le modèle car des choses comme les applications à page unique (SPA) auront des commentaires de validation des données pour l'utilisateur. Tout autre croisement est fortement mal vu.
Le modèle traite des données. Cela comprend la validation des données (le cas échéant). Le stockage et la récupération des données sont également gérés dans cette couche.
MISE À JOUR
Il semble y avoir une certaine confusion autour de qui fait quoi et quand. J'ai inclus deux aperçus différents des architectures MVC car elles sont similaires, mais pas identiques. Il y a place pour l'une ou l'autre interprétation. Peut-être beaucoup plus. Les descriptions ci-dessus sont mon interprétation de MVC à partir de plusieurs sources, y compris ma propre expérience dans la création d'applications utilisant cette méthodologie. Espérons que cette mise à jour contribuera à dissiper une partie de cette confusion.
MVC est une tentative de construire un modèle de conception de séparation des préoccupations pour le développement de logiciels. Il a été principalement implémenté dans des applications Web (à ma connaissance).
La vue gère toutes les interactions de l'utilisateur. Si votre utilisateur clique sur un bouton, la vue détermine si le clic est une interaction de l'interface utilisateur ou quelque chose qui est au-delà de sa préoccupation (une interaction du contrôleur). Si le bouton fait quelque chose comme copier des valeurs d'un champ à un autre, votre implémentation déterminera s'il s'agit d'un problème de vue ou d'un problème de contrôleur. Vous n'aurez probablement ce flou de préoccupations que lorsqu'il s'agit d'une application de page unique (SPA).
Le contrôleur est l'endroit où vos actions sont traitées. La vue a communiqué que l'utilisateur a décidé de modifier les valeurs de certains champs. Le contrôleur peut effectuer la validation de ces données ou elles peuvent être traitées par le modèle. Encore une fois, cela dépend de la mise en œuvre. Si le contrôleur possède des fonctions de sécurité, il peut déterminer que l'utilisateur ne dispose pas de privilèges suffisants pour effectuer l'action. Il rejetterait les modifications et mettrait à jour la vue en conséquence. Le contrôleur détermine également les données à récupérer du modèle, comment les empaqueter et mettre à jour la vue avec ces données.
Le modèle détermine comment et où stocker les données. Il peut également effectuer la validation de ces données avant de les stocker (il devrait le faire car les gens contourneront la vue à l'occasion).
Wikipedia a un article sur MVC .
- Un modèle notifie sa ou ses vues et contrôleurs associés en cas de changement d'état. Cette notification permet aux vues de mettre à jour leur présentation et aux contrôleurs de modifier l'ensemble de commandes disponible. Dans certains cas, une implémentation MVC peut plutôt être «passive», de sorte que d'autres composants doivent interroger le modèle pour les mises à jour plutôt que d'être notifiés.
- Une vue est donnée par le contrôleur toutes les informations dont il a besoin pour générer une représentation de sortie pour l'utilisateur. Il peut également fournir des mécanismes génériques pour informer le contrôleur des entrées utilisateur.
- Un contrôleur peut envoyer des commandes au modèle pour mettre à jour l'état du modèle (par exemple, modifier un document). Il peut également envoyer des commandes à sa vue associée pour modifier la présentation de la vue du modèle (par exemple, en faisant défiler un document).
Extrait de la présentation de Microsoft sur MVC .
Des modèles. Les objets de modèle sont les parties de l'application qui implémentent la logique du domaine de données de l'application. Souvent, les objets de modèle récupèrent et stockent l'état du modèle dans une base de données. Par exemple, un objet Product peut récupérer des informations dans une base de données, y opérer, puis réécrire les informations mises à jour dans une table Products dans une base de données SQL Server.
Dans les petites applications, le modèle est souvent une séparation conceptuelle au lieu d'une séparation physique. Par exemple, si l'application lit uniquement un ensemble de données et l'envoie à la vue, l'application n'a pas de couche de modèle physique et de classes associées. Dans ce cas, l'ensemble de données joue le rôle d'un objet modèle.
Vues. Les vues sont les composants qui affichent l'interface utilisateur (UI) de l'application. En général, cette interface utilisateur est créée à partir des données du modèle. Un exemple serait une vue d'édition d'une table Produits qui affiche des zones de texte, des listes déroulantes et des cases à cocher en fonction de l'état actuel d'un objet Produit.
Contrôleurs. Les contrôleurs sont les composants qui gèrent l'interaction utilisateur, travaillent avec le modèle et sélectionnent finalement une vue à rendre qui affiche l'interface utilisateur. Dans une application MVC, la vue affiche uniquement des informations; le contrôleur gère et réagit à l'entrée et à l'interaction de l'utilisateur. Par exemple, le contrôleur gère les valeurs de chaîne de requête et transmet ces valeurs au modèle, qui à son tour peut utiliser ces valeurs pour interroger la base de données.