Cadriciel Ntro #
-
Un cadriciel permet
- d’organiser le code
- de simplifier certaines tâches courantes (charger un modèle, créer une vue)
-
Ntro
est développé par le prof à des fins pédagogiques -
Le but est d’arrimer les concepts vu en cours avec le code, p.ex:
- on voit les concepts de Client et de Frontal
- en
Ntro
, on doit définir une classeClient
et une classeFrontal
-
Un autre objectif est de visualiser le plus possible la logique de l’application
-
Ntro
a aussi la particularité de supporter à la fois Java et Javascript (via JSweet)- p.ex. presque tout sur aiguilleur.ca est programmé en Java:
- le serveur Web
- le dorsal, qui s’exécute sur le serveur
- le frontal, qui peut s’exécuter
- sur le serveur (en Java)
- ou dans le navigateur (en Javascript tiré du même code Java)
- p.ex. presque tout sur aiguilleur.ca est programmé en Java:
Patron MVC en Ntro
#
-
De façon général, le patron MVC signifie qu’on organise le code en trois parties:
- Les Modèles:
- les données
- la logique du domaine d’application (p.ex. les règles d’un jeu)
- Les Vues:
- affichage des données
- interactions avec l’usager
- Le Contrôleur:
- la logique du programme, p.ex.
- comment charger les modèles (base de données? fichiers?)
- quand crééer les vues (dès le début? dynamiquement?)
- Les Modèles:
-
Typiquement, un cadriciel propose sa propre version du partron MVC
-
Voici la version proposée par Ntro
- On a une notion explicite de Frontal et de Dorsal
- Le Frontal réagit aux événements usagers
- Le Frontal envoit des messages au Dorsal
- Seul le Dorsal peut modifier un modèle
- Le Frontal reçoit des mises-à-jour quand le modèle est modifié
- on dit que le frontal observe le modèle
- via les mises-à-jour, le frontal peut afficher les données du modèle
- (le Frontal ne manipule jamais le modèle au complet)
Le client en Ntro
#
- La classe principale d’un client
Ntro
doit implanterNtroAppFx
(pour JavaFx)
public class AppPong implements NtroAppFx {
- Cette classe doit appeler
launch
pour démarrer l’application
public static void main(String[] args) {
NtroAppFx.launch(args);
}
- Elle doit aussi déclarer un frontal, des modèles, des messages et un dorsal
@Override
public void registerFrontend(FrontendRegistrarFx registrar) {
registrar.registerFrontend(FrontalPong.class);
}
@Override
public void registerMessages(MessageRegistrar registrar) {
}
@Override
public void registerModels(ModelRegistrar registrar) {
}
@Override
public void registerBackend(BackendRegistrar registrar) {
}
Le frontal en Ntro
#
- Le frontal est une classe qui implante
Frontend
public class FrontalPong implements FrontendFx {
- Le frontal doit aussi créer des tâches, déclarer des événements et des vues:
@Override
public void createTasks(FrontendTasks tasks) {
}
@Override
public void registerEvents(EventRegistrar registrar) {
}
@Override
public void registerViews(ViewRegistrarFx registrar) {
}
Le dorsal en Ntro
#
- Le dorsal de base est une classe qui hérite de
LocalBackendNtro
public class DorsalPong extends LocalBackendNtro {
- Le dorsal doit aussi créer des tâches
@Override
public void createTasks(BackendTasks tasks) {
}
- La méthode
execute
va être appelée quand l’application est prête:
@Override
public void execute() {
}
Le contrôleur en Ntro
: un graphe de tâches
#
-
Ntro
n’a pas de notion explicite de contrôleur -
On va plutôt définir des graphes de tâches
- un pour le frontal et un pour le dorsal
-
Le frontal va créé les tâches concernant les vues et les événements usager
-
Le dorsal va créé les tâches pour recevoir les messages et modifier les modèles