Le problème avec MVC
, c'est que les gens pensent de la vue, le contrôleur et le modèle doivent être aussi indépendants que possible les uns des autres. Ils ne sont pas d'un point de vue et le contrôleur sont souvent entremêlées - il pense que M(VC)
.
Le contrôleur est le mécanisme d'entrée de l'interface utilisateur, qui est souvent empêtré dans la vue, en particulier avec les Interfaces graphiques. Néanmoins, la vue est sortie et est un contrôleur d'entrée. Une vue peut souvent fonctionner sans un contrôleur correspondant, mais un contrôleur est généralement beaucoup moins utile, sans vue. Utilisateur conviviale de l'utilisation de contrôleurs de la vue d'interpréter l'entrée de l'utilisateur dans un plus significatives, intuitive de la mode. C'est ce que c'est difficile de séparer le concept de contrôleur de la vue.
Pensez à un radio-pilotée robot sur un champ de détection dans une boîte scellée comme le modèle.
Le modèle est tout au sujet de l'état et des transitions d'état avec pas de concept de sortie (affichage) ou ce qui est le déclenchement de la transition de l'état. Je peux obtenir la position du robot sur le terrain et le robot sait, la transition de la position (prendre un pas en avant/arrière/gauche/droite. Facile à imaginer, sans vue ou d'un contrôleur, mais ne fait rien d'utile
Pense que d'un point de vue, sans un contrôleur, par exemple, quelqu'un dans une autre pièce sur le réseau dans une autre salle, en regardant la position du robot (x,y) les coordonnées de streaming un défilement vers le bas de la console. Ce point de vue est juste de l'affichage de l'état du modèle, mais ce gars n'a pas de contrôleur. Encore une fois, facile à imaginer ce point de vue, sans un contrôleur.
Pensez à un contrôleur sans vue, par exemple, quelqu'un enfermé dans un placard avec la radio contrôleur à l'écoute pour le robot de la fréquence. Ce contrôleur est l'envoi d'entrée et de causer des transitions d'état avec aucune idée de ce qu'ils font pour le modèle (le cas échéant). Facile à imaginer, mais pas vraiment utile sans une sorte de rétroaction à partir de la vue.
La plupart d'utilisateur-INTERFACE utilisateur conviviale de coordonnées de la vue avec le contrôleur à fournir une interface utilisateur plus intuitive. Par exemple, imaginez une vue/contrôleur avec un écran tactile montrant le robot de la position actuelle en 2-D et permet à l'utilisateur de toucher le point sur l'écran qui se trouve tout juste à l'avant du robot. Le contrôleur de détails sur la vue, par exemple, la position et l'échelle de la fenêtre d'affichage et la position d'un pixel de l'endroit touché par rapport à la position d'un pixel du robot sur l'écran) pour interpréter correctement (contrairement au mec enfermé dans le placard avec la radio, le contrôleur).
Ai-je répondu à votre question? :-)
Le contrôleur est quelque chose qui prend une entrée de l'utilisateur qui est utilisé pour le modèle de transition de l'état. Essayez de garder la vue et le contrôleur a séparés, mais se rendent compte qu'ils sont souvent interdépendants les uns des autres, de sorte qu'il est correct si la frontière entre eux est floue, c'est à dire avoir la vue et le contrôleur de séparer les paquets peuvent ne pas être clairement séparées comme vous voulez, mais c'est correct. Vous pourriez avoir à accepter le contrôleur ne pas être clairement séparées de la vue que la vue est à partir du modèle.
... de validation, etc
fait dans le Contrôleur? Si oui, comment faire
Je rétroaction des messages d'erreur de retour à l'
De vue, qui devrait passer par la
Modèle de nouveau, ou si le Contrôleur
tout simplement l'envoyer tout droit de revenir à l'Affichage?
Si la validation est faite dans la Vue,
que dois-je mettre dans le Contrôleur?
Je dis lié vue et le contrôleur doit interagir librement sans passer par le modèle. Le contrôleur de prendre l'entrée de l'utilisateur et doit procéder à la validation (peut-être en utilisant des informations du modèle et/ou de la vue), mais si la validation échoue, le contrôleur doit être en mesure de mettre à jour ses vues liées directement (par exemple, message d'erreur).
Le test de l'acide pour cela est de se poser est de savoir si d'un point de vue indépendant (c'est à dire le gars dans l'autre chambre, en regardant la position du robot via le réseau) doit voir quoi que ce soit ou non comme un résultat de quelqu'un d'autre erreur de validation (par exemple, le gars dans le placard essayé de dire le robot à l'étape hors du terrain). Généralement, la réponse est non - l'erreur de validation empêché la transition de l'état. Si il n'y avait pas d'état au tranistion (le robot ne bouge pas), il n'est pas besoin de dire aux autres points de vue. Le gars dans le placard juste ne pas obtenir des commentaires qu'il a essayé de provoquer une transition illégale (sans vue - mauvaise interface utilisateur), et personne ne doit le savoir.
Si le gars avec l'écran tactile essayé d'envoyer le robot hors du terrain, il a eu une belle convivial message vous demandant de ne pas tuer le robot en l'envoyant hors de la zone de détection, mais encore une fois, personne ne doit le savoir.
Si d'autres points de vue ne devez savoir à propos de ces erreurs, alors vous êtes effectivement dire que les entrées de l'utilisateur et les erreurs sont une partie du modèle et de toute la chose est un peu plus compliqué ...