-
MVC et implémentation
Bonjour,
Je suis en train de réaliser une application en Java : un jeu de dame. Je me retrouve confronté à certains problèmes lors de l'implémentation du pattern MVC.
- Tout d'abord : dans le tutoriel Implémentation du pattern MVC, le modèle de base ne comprend qu'une seule donnée membre (volume). Donc l'évènement VolumeChangedEvent se suffit à lui-même.
Mais que faire dans le cas d'un modèle comprenant cinq (ou plus) données membres ?
Doit-on créer une classe événement pour chaque données membres ?
- Ensuite mon problème, je possède les classes suivantes :
- Player : une classe représentant un joueur;
- Game : la classe qui s'occupe de l'intéraction avec le (ou les) joueurs;
- Map : la classe qui gère le plateau de jeu;
- Piece : une pièce possèdant une couleur.
Imaginons que je veuille porter mon système sur la console en premier temps. La classe Game sera donc constituée d'appel à "System.out.println()".
Un moment plus tard, je souhaite développer une véritable interface graphique. Je fais donc appel à MVC pour garder l'implémentation séparée de l'UI (car je souhaite garder mon jeu compatible pour la ligne de commande).
Comment implémenter MVC avec cet ensemble de classe ?
Et où se situera le controller dans mon application ?
Je n'arrive pas très bien à saisir le fonctionnement de MVC dans une véritable application (autre qu'un exemple).
Merci de votre aide.
Edit : désolé, je viens de m'apercevoir que je n'ai pas posté dans le bon forum... Il y avait encore un sous-forum MVC :s
-
Salut,
Voila comment je vois ton appli :
- Player : Package Metier
- Game : Package controler
- Map : Package IHM
- Piece : Package Metier
Cordialement
-
Merci pour ta réponse.
Mais comment structurer le projet pour avoir plusieurs vues de la Map ?
Et logiquement le Player devrait contacter lui-même la classe Map, non ? Vu que le Player peut-être une IA.
Et sinon pour ma première question ? Chaque données membres entraîne la création d'une classe évènement ?
Merci !
-
Bonjour,
Concernant la première question, c'est simplement un choix d'implémentation. Potentiellement, (je ne connais pas bien java), on aura une classe événement par type d'évènement, pas par donnée membre.
Pour reprendre l'exemple du tutorial, s'il y avait en plus un bouton pour couper le son, il y aurait un événement volumeChanged et un volumeMute, alors qu'il n'y a qu'une donnée membre volume.
Inversement il peut y avoir plus de données membre que d'évènement.
Pour ton cas de jeu de dames, tu n'es pas parti d'un modèle MVC dans ton développement, et il y a beaucoup de choses à revoir pour que cela corresponde à un MVC.
Pour résumer, les classes que tu as créées devraient être décomposées en plusieurs parties pour rentrer dans un MVC.
Voici le rôle des trois parties :
- modele : il stocke l'état du jeu. C'est lui qui sait où se situe quelle pièce et à qui elle appartient.
- vue : C'est la partie qui intéragira avec l'utilisateur. Elle a deux rôles : Mettre en forme ce qu'envoie le modèle, et envoyer au controleur les évènements envoyés par l'utilisateur (clic sur un bouton, appui sur une touche, etc...)
- controleur : C'est lui qui décide quelle modification doit être faite sur le modèle en fonction de l'évènement reçu.
Dans ces trois parties, ta classes player n'a pas vraiment de place par exemple. Si c'est un humain, il s'agit juste des évènements reçus par la vue, si c'est une IA, elle fera partie du modèle, du contrôleur ou des deux. S'il s'agit du score alors c'est uniquement dans le modèle
La première étape est donc d'abord de revoir tes classes et notamment de savoir quelles données membre elles vont avoir.
Essaye de créer seulement 3 classes (modèle, vue et controleur) et de mettre à l'intérieur les données membres que tu avais prévues dans tes classes de départ.
Une fois que tu auras fait ça tu devrais y voir beaucoup plus clair.
N'hésite pas à indiquer ici tes 3 classes où les problèmes que tu rencontres pour les créer éventuellement.
Bon courage!