IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaFX Discussion :

Application JavaFX et MVC


Sujet :

JavaFX

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 47
    Points : 31
    Points
    31
    Par défaut Application JavaFX et MVC
    Bonjour,

    Je développe une application en JavaFX et je me demandais comment la diviser en plusieurs package pour satisfaire au modèle MVC.
    J'ai surtout un problème pour savoir quoi mettre dans le contrôleur car tout ce qui est action se trouve directement dans les objets de la Vue.

    PS : Ce n'est pas un projet JavaFX FXML, je ne sais pas si cela change quelque chose.

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Bon alors reprenons :

    Pour les contrôles standards :
    • Le Modèle est le contrôle que tu manipule dans l'API.
    • La Vue est le Skin du contrôle. Ce skin est placé sur le modèle via CSS (-fx-skin suivi du nom de la classe) et devient effectif losqu'on attache un contrôle dans le SceneGraph. L'API skin est devenue publique dans le JDK 8. Les skins des contrôles par défaut deviendront publiques dans le JDK 9.
    • Le Contrôleur est créée par le skin (dans son constructeur dans l’implémentation JDK 7-8, cela changera peut-être/sans doute dans le JDK 9) via un objet de type Behavior (comportement). L'API behavior n'est pas publique et ,pour le moment, il n'est pas prévu qu'elle le devienne pour le JDK 9 faute de temps et de main d’œuvre*. Le fait que le behavior ne soit pas publique rend assez ardu l’implémentation de skins pleinement fonctionnelles actuellement.


    *En effet, de manière globale, Oracle est entrain de se focaliser sur autre chose (le cloud). Ce qui fait que les principales équipes du JDK s'en trouvent réduites en effectifs et en moyens et donc grosso-modo doivent juste assurer en priorité l’implémentation de jigsaw pour le JDK 9 et rien d'autre.

    Concernant FXML, c'est une autre paire de manche car grosso-modo tu vas devoir implémenter un truc la ou il n'y a pas de norme prédéfinie.
    Il reste cependant assez facile d’implémenter MVC:

    • Tu va te créer un contrôle, ton Modèle, qui hérite de Region en définissant dedans toutes les propriétés et données a stocker dans le contrôle. Il faudra surcharger la méthode layoutChildren() du contrôle pour qu'il affiche la vue dans l’espace défini dans la Region (ou utiliser la construction fx:root du FXML pour injecter un noeud racine dans le FXML lors de son chargement ce qui attachera automatiquement la vue dans la région).
    • Ton contrôle a une Vue qui est le fichier FXML. Cette vu ne manipule pas le modèle et reste complètement détachée. Si tu désires retirer toute référence au fichier FXML dans le code, tu peux te créer une propriété CSS** pour injecter la vue lors de l’exécution.
    • Ton contrôle a un Contrôleur qui est le contrôleur du FXML. Ce contrôleur peut être injecté via le FXML lui-même ou via le FXML loader ou via une autre propriété CSS** si tu veux éviter de le code en dur. Il va te falloir passer une référence au modèle dans le contrôleur pour que ce dernier puisse manipuler l’état, les propriétés et les données et mettre a jour la vue (qu'il référence via les valeurs injectées @FXML).


    **Attention c'est faisable mais assez pénible en l’état : Tout est dans le style sur mon ancien blog.

    Si je puis me permettre, je te suggères dans un premier temps de te focaliser sur implémentation d'un contrôle de type M-VC (modèle vue+contrôleur) avec le FXML et son contrôleur qui sont fortement liées. Deux raisons : c'est plus rapide a mettre en place initialement. Et ensuite, écrire un contrôleur réutilisable quelque soit la vue est un truc assez hypothétique/théorique en fait et, en général, un contrôleur est presque toujours fortement lié a une vue donnée. En théorie, le fait d'avoir des objets tagués par des id et injectés dans des valeurs @FXML permet de faire varier de manière indépendante a la fois la vue et le contrôleur mais soyons réalistes, une ListView et une TableView même tagué avec la même id ne se manipulent pas de la même manière et donc il n'est pas toujours entièrement possible de rendre le contrôleur indépendant de la vue. Avoir plusieurs types de contrôleurs pour une vue FXML unique reste par contre assez aisé via les valeurs @FXML et compte tenu du fait qu'il est possible d'injecter le contrôleur dans le loader.

    Pour la petite histoire même Swing est bien plus M-VC que M-V-C. Et Swing utilise un double modèle : le composant lui-même (javax.swing.JComboBox qui est un modèle contenant l’état du contrôle) + assez souvent une classe modèle externe pour stocker les données (ex : javax.swing.DefaultComboBoxModel). Le couple vue-contrôleur est implémenté dans le UI delegate du LnF qui sert de skin (ex : javax.swing.plaf.basic.BasicComboBoxUI). Les contrôles JavaFX eux sont généralement a simple modèles (le contrôle lui-même qui contient a la fois l’état et les données). Certains contrôles (tout ceux a base de listes) ont cependant un modèle de sélection externe tout comme ceux de Swing en avaient un.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 47
    Points : 31
    Points
    31
    Par défaut
    J'ai beaucoup de mal à comprendre tout ça !

    Laissons de côté le FXML si tu veux bien, je n'aurais pas le temps d'apprendre cela pour la remise de mon projet
    Quand tu parles de contrôle tu veux bien parler de boutons, de panes, de menus, etc ? (tout ce qui est affiché à l'écran ?)

    La vision que j'ai du MVC (en console du moins) c'est :
    • Le Modèle comporte les objets métiers de l'application
    • Le contrôleur gère l'action de l'utilisateur, modifie le modèle si besoin
    • La vue affiche les données du modèle pour l'utilisateur



    Est-ce que tu aurais un exemple concret (du code) pour m'illustrer ça avec JavaFX (sans FXML) ?

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Effectivement, nous ne parlons pas de la même chose. Je te parle des contrôles existants et de la manière de concevoir des nouveaux controles pour l'UI et tu sembles me parler d'une application en entier. Or pour une application on utilise pas MVC, on utilise une architecture en 3-tiers. Alors oui, il y a 3 parties mais leur fonctions n'a pas grand chose à voir avec celles des sous-parties de MVC. MVC s'applique explicitement à des sous-composants de la partie présentation/client d'une architecture trois tiers.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 47
    Points : 31
    Points
    31
    Par défaut
    Ok, merci !
    Je vais lire ton lien sur l'architecture 3-tiers. Est ce l'architecture la plus efficace ? la plus utilisée ?

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Pour les applications à ma connaissance oui c'est ce qui est le plus utilisé. Voir là pour des discussions d'ordre plus général : [N-Tier] Conception trois tiers (3-tier) ou ici pour un didacticiel (pour VB.Net mais le concept reste le même quelque soit le langage ou la plateforme utilisée).

    Après il y a d'autres manières de faire comme le découpage en services.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Phoste Voir le message
    J'ai beaucoup de mal à comprendre tout ça !

    Laissons de côté le FXML si tu veux bien, je n'aurais pas le temps d'apprendre cela pour la remise de mon projet
    Quand tu parles de contrôle tu veux bien parler de boutons, de panes, de menus, etc ? (tout ce qui est affiché à l'écran ?)

    La vision que j'ai du MVC (en console du moins) c'est :
    • Le Modèle comporte les objets métiers de l'application
    • Le contrôleur gère l'action de l'utilisateur, modifie le modèle si besoin
    • La vue affiche les données du modèle pour l'utilisateur



    Est-ce que tu aurais un exemple concret (du code) pour m'illustrer ça avec JavaFX (sans FXML) ?
    Un exemple concret: https://github.com/amirdine/personal...lculatrice/src

    Au cours d'un projet, j'ai du travailler avec JavaFx en utilisant le design pattern MVC, histoire d'avoir un code plus claire. Je pense que ça respecte le schema Model,Vue, Controller. J'espère avoir répondu à ta question.

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/08/2011, 09h30
  2. Réponses: 1
    Dernier message: 03/05/2010, 10h51
  3. Application du modele MVC
    Par Clorish dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 20/07/2009, 10h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo