Selon Wikipedia:
un objet contrôleur est un objet d'interface utilisateur non-responsable de la réception ou la manipulation d'un événement système
.
De Applying UML and Patterns:
Quel premier objet au-delà de la couche d'interface utilisateur reçoit d'abord et les coordonnées (« contrôle ») une opération de système?
Contrôleurs, dans tous les domaines - que ce soit dans MVC ou GRASP ou Patterns of EAA - sont sur la réception de l'entrée et la réponse aux événements.
Je le conceptualise très littéralement: pensez à un jeu vidéo contrôleur.
Il répond aux événements d'entrée - l'utilisateur appuyant sur les boutons. Il ne sait pas nécessairement quoi faire lorsque vous appuyez sur un bouton, mais il reçoit au moins l'événement.
En regardant le contrôleur, on peut facilement comprendre quels sont les événements du système - c'est-à-dire à quelles entrées il répond et comment l'utilisateur interagit avec le système.Sur un contrôleur de Nintendo, il est évident que les événements du système sont:
- Presse
A
- Presse
B
- Presse
X
- Presse
Y
- Presse
↑
- Presse
↓
- Press
→
- Presse
←
- Presse
L
- Presse
R
Si nous devions prendre tous ces événements et construire un contrôleur logiciel pour traiter avec eux, ce serait un contrôleur MVC: ces événements sont tous concerné par le contrôleur physique tel que présenté à l'utilisateur - c'est "vue", si vous voulez. Mais il existe une deuxième couche d'événements d'entrée pour la plupart des jeux vidéo, où le mappage de boutons correspond à des opérations système spécifiques. Par exemple, si vous jouez en tant que Scorpion dans Mortal Kombat 2, en appuyant sur ← ← B
déclenche l'un de vos coups spéciaux. Dans ce cas, le système pourrait avoir besoin de différents contrôleurs qui traitent de ces différents types d'événements:
Ici, le NES Button Controller
est un contrôleur MVC qui garderait la trace de l'état des éléments de l'interface utilisateur - par exemple, se rappeler quels boutons ont été pressés dans quel ordre. En fonction de l'état de l'application (voir Application Controller - un autre!), Le NES Button Controller
répondrait à certaines combinaisons de touches en invoquant des méthodes sur les autres contrôleurs - par exemple le Scorpion Controller
- qui sont des contrôleurs de cas d'utilisation.
Ce qui est important est qu'en regardant la conception de ces objets de contrôleur, vous pouvez rapidement et facilement énumérer les événements du système auxquels ils répondent. En fin de compte, le contrôleur MVC est toujours une sorte de contrôleur GRASP - car ses méthodes ont tendance à représenter les événements du système, qui répondent à l'entrée de l'utilisateur. Mais il existe d'autres contrôleurs GRASP qui ne sont pas des contrôleurs MVC: Contrôleurs de cas d'utilisation. Un contrôleur de cas d'utilisation GRASP peut répondre à des événements système tels que "utilisateur crée une nouvelle vente" pendant qu'un contrôleur MVC répond à des événements tels que "système reçoit une demande PUT pour /sales/new
" ou "un java.awt.event.ActionEvent
incendies".
Donc, par définition, un contrôleur doit être une classe délégante? Une classe qui délègue des appels de fonction, etc. à d'autres classes qui font le travail? –
Pas tout à fait; Je me trompe là-bas ... mais j'ai tendance à utiliser les contrôleurs frontaux donc c'est un peu mon parti pris. La partie la plus importante est qu'elle répond à l'entrée. –
Là, clarifié :) –