Architecture Overview - Heigvd/Wegas GitHub Wiki

Dans WEGAS, un scénariste doit pouvoir définir la structures de données de chaque jeu (scores, indicateurs, réponses aux questions, etc.), leur présentation ainsi que les interactions que le joueur peut avoir avec celles-ci. Pour atteindre ce niveau d’abstraction tout en gardant une bonne modularité, nous avons adopté une approche basée sur le patron modèle-vue-contrôleur (MVC) : le modèle contient les données du jeu, les vues définissent leur présentation et le contrôleur permet de les manipuler.

Dans notre cas, le modèle nécessite un accès rapide en écriture (chaque clique peut impacter la simulation) et être fortement structuré (pour permettre au scénariste de définir des impacts). Les vues nécessitent, elles, une structure souple pour être modulaires (afin de créer des jeux différents). Le contrôleur doit permettre de modifier le modèle de manière simple pour le scénariste ou complexe pour le programmeur. En effet, le scénariste doit pouvoir facilement incrémenter un indicateur ou activer une réponse à une question. Le programmeur doit quant à lui pouvoir intégrer des modèles de simulation plus élaborés comme par exemple la simulation de l’avancée des tâches dans le jeu de gestion de projet.

Nous avons sélectionné pour la réalisation de WEGAS le framework Java EE. Son approche multi-niveaux permet de réutiliser une grande partie de l’infrastructure existante tout en intégrant les spécificités de WEGAS. L’interface de Java Persitence Annotation nous permet de stocker notre modèle dans une base de données PostrgreSQL de manière fortement typée. L’interface Content Repository API pour Java nous permet de stocker les vues dans un système de fichiers rapide en lecture et sous une forme non-structurée. Finalement, l’interface Scripting for Java permet aux scénaristes de définir en JavaScript les impacts des différents contrôleurs du serveur.

Component Diagram

Pour obtenir une application réactive, le rendu des vues est exécuté côté client et les données sont récupérées au chargement de la page. La libraire Yahoo User Interface fournit les bases des vues (Widgets) et des modèles (Datasource) côté client. Les données sont récupérées au travers d’une façade REST qui fait appel aux interfaces Enterprise Java Bean (EJB) pour accéder aussi bien à la base de données qu’au content repository. Lors de l’appel à un contrôleur, la façade EJB instancie le moteur de script Rhino pour mettre à jour les données. Le schéma ci-dessous montre ce fonctionnement dans le cas d’une action d’un joueur, par exemple lors de la réponse à une question.

Sequence diagram