J'ai récemment découvert le modèle de conception MVC. J'apprends du livre Head First Design Pattern.
Selon ce livre (si je comprends bien):
Le modèle est la plupart de la logique d'application et des données.
La vue est essentiellement l'interface graphique qui représente visuellement le modèle pour l'utilisateur.
Le contrôleur est responsable de la «médiation» et agit comme un «intermédiaire» entre la vue et le modèle. La vue signale au contrôleur que l'utilisateur a effectué une action et le contrôleur la traduit en appels de méthode sur le modèle.
Cependant, beaucoup d'endroits sur le Web contredisent ce que je comprends de ce livre. Ils affirment que généralement l'utilisateur interagit avec le contrôleur, pas avec la vue.
Laquelle est vraie ou plus courante? L'utilisateur interagit-il directement avec le contrôleur ou directement avec la vue? Les deux approches sont-elles acceptables? Quel est le plus courant?
la source
Réponses:
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 .
Extrait de la présentation de Microsoft sur MVC .
la source
url-routes
, placé dans leController
. Je veux dire pas de vue du tout ...L'utilisateur interagit avec le contrôleur . Du point de vue technique , vous n'êtes pas en interaction avec le View , vous êtes juste en utilisant pour interagir avec le contrôleur .
En surface, il semble que l'utilisateur interagisse avec l'interface graphique - également pour un non-programmeur, cela a plus de sens, mais en cliquant sur un bouton, vous parlez essentiellement au contrôleur et non à la vue .
De plus, toutes les applications - même les applications Web MVC, n'ont pas d'interface graphique. Vous pouvez interagir avec le contrôleur via une API - simple
url-routes
par exemple, placée dans le contrôleur lui-même.Le contrôleur doit être l'endroit qui reçoit et traite les demandes des utilisateurs. Donc, si vous accédez en quelque sorte au modèle directement à partir de View - peu importe comment, alors ce n'est plus MVC .
la source
Prenons un exemple concret de la raison pour laquelle les utilisateurs interagissent directement avec les vues et non avec les contrôleurs.
Dans l'application musicale sur iPhone, une fonction de haut niveau consiste à lire une liste de lecture. "Lire une liste de lecture" est une fonction d'un contrôleur de l'application.
Il existe plusieurs façons d'activer cette fonction. Je peux cliquer sur la liste de lecture à l'intérieur de l'application, ou je peux demander à Siri (interface vocale) d'exécuter la même fonction. Ce sont deux gestes différents qui sont reconnus par les différentes vues.
Les commentaires dans chaque vue sont également différents. Siri vous dira qu'il joue la musique que vous avez demandée. L'application musicale vous montrera un retour visuel indiquant qu'elle joue la liste de lecture.
la source