Utilisation de MVC dans une application Java

10

J'ai besoin d'écrire une application GUI multiplateforme pour traiter (dans plusieurs threads) et visualiser des quantités de données assez importantes. Idéalement, l'application doit être relativement rapide et bien paraître.

L'interface de l'application se composera d'un widget de table, d'un widget d'arbre et d'un widget de dessin de figure personnalisé. L'utilisateur pourra modifier les données de n'importe lequel de ces widgets et les changements devraient être immédiatement reflétés dans les autres widgets.

Naturellement, je prévois d'utiliser MVC. Cependant, je fais normalement toute ma programmation GUI en C ++ / Qt, et j'ai une exposition très limitée à Java. J'apprécierais donc vraiment tout conseil sur la façon d'organiser une telle application en Java. En particulier, dois-je utiliser Swing ou JavaFX? Quels widgets choisiriez-vous pour le travail? Pourriez-vous recommander des livres / tutoriels en ligne couvrant ces aspects de la plate-forme Java?

J'apprécierai grandement toute rétroaction. Merci!

(cette question a été initialement publiée sur Stack Overflow , mais ce site a été suggéré comme un endroit plus approprié pour la poser)

egor
la source

Réponses:

21

Tout cela est très subjectif car plusieurs technologies différentes pourront répondre à vos besoins.

Comme d'autres, je recommanderai probablement la technologie que je préfère personnellement pour un tel projet, qui serait JavaFX .

Les raisons pour lesquelles je recommanderais JavaFX sont:

OK, je suppose que ce qui précède est un peu tangent, mais j'aime promouvoir JavaFX ;-)

Quoi qu'il en soit, pour répondre aux points spécifiques de votre question:

  • JavaFX est un framework GUI multiplateforme (actuellement Mac / Windows / Linux).
  • JavaFX a un support de threading multiple intégré de haute qualité (le framework principal lui-même est à thread unique comme c'est le cas pour toutes les autres plates-formes GUI, mais vous pouvez définir vos propres tâches à exécuter simultanément sur le thread GUI afin que le thread GUI reste sensible).
  • Un programme JavaFX bien écrit ne devrait avoir aucun problème de performance assez bien pour visualiser des quantités de données assez importantes. Voici un exemple de projet JavaFX qui fait cela.
  • La possibilité de styliser l'application via css, d'utiliser des effets visuels et des animations, vous permet de travailler avec des concepteurs pour rendre votre application superbe ou le faire vous-même si vous avez les compétences.
  • JavaFX a une TableView et une TreeView que vous pouvez utiliser. Il existe également un contrôle TreeTable combiné qui a été développé en préparation de la version Java 8 .
  • Le widget de dessin de figure personnalisé pourrait utiliser des formes de graphique de scène ou une toile de dessin direct - c'est vraiment juste une question de style de codage et de préférence.
  • Les propriétés et les fonctions de liaison de JavaFX couplées à ses cadres d'écoute d'événements rendent trivial la modification des données à l'aide d'un contrôle et la répercussion immédiate des modifications dans d'autres contrôles.
  • Pour le développement de style MVC, vous pouvez écrire votre modèle à l'aide d'objets Java simples, définir votre vue à l'aide du langage de balisage FXML (créé à l'aide de l'outil de présentation graphique SceneBuilder si vous le souhaitez) et définir votre logique de contrôle en Java (ou un autre langage de script si vous préférez) , en plus vous devez séparer votre style de votre logique en utilisant CSS.
  • Comme vous avez une exposition limitée à Java, la courbe d'apprentissage sera importante. Il existe d'excellents didacticiels Java en plus des didacticiels JavaFX auxquels j'ai lié plus tôt, qui peuvent vous aider. Le code de base JavaFX utilise uniquement les fonctionnalités disponibles dans le JDK, donc pour utiliser JavaFX, vous n'avez pas besoin d'apprendre beaucoup de bibliothèques et de cadres supplémentaires (comme vous le feriez si vous appreniez JavaEE par exemple). Ces deux sites tuotoriaux fournissent donc la plupart des informations dont vous avez besoin pour vous mettre à jour.
  • Pour l'organisation des applications, si vous avez une application complexe et que vous avez besoin du support d'un cadre d'application client complet et éprouvé et que cela ne vous dérange pas de faire beaucoup d'apprentissage supplémentaire, vous pouvez intégrer JavaFX dans Eclipse RCP ou NetBeans RCP , qui, selon à leurs pages pourrait vous faire économiser des années de développement. Je ne conseillerais toutefois de regarder de telles plates-formes que si vos besoins le justifient, car pour les projets de petite à moyenne taille, il sera probablement plus simple de coder le contenu directement dans JavaFX sans les cadres de plate-forme client complexes tels que Eclipse et NetBeans.
  • Quant à savoir si vous devez utiliser Swing ou JavaFX, je ne suis pas vraiment la personne la plus objective pour répondre à cela. JavaFX a certainement des lacunes qui vous apparaîtront au fur et à mesure que vous commencerez à l'utiliser (tout comme Swing).
  • Pour les didacticiels en ligne, je suis lié aux plus pertinents. Il y a un bel ensemble de tutoriels pour une application complète .
  • Les livres Pro JavaFX 2 et JavaFX 2.0 Introduction by Example sont très appréciés.
jewelsea
la source
Merci pour cette réponse incroyable! JavaFX sonne bien sûr comme une plate-forme douce et je vais certainement y investir beaucoup de temps. De plus, les deux livres que vous avez recommandés sont disponibles dans ma bibliothèque :)
egor
1
Ce lien "les meilleurs IDE du monde" devrait vraiment pointer vers IntelliJ IDEA;) Excellente réponse, très informative, merci!
Cooper
1
Il convient de noter que JavaFX n'a ​​actuellement aucun support d'accessibilité. Cela peut être une rupture pour certains (c'était pour moi) et devra continuer à utiliser Swing.
Cooper du
JavaFX fournit désormais un support d'accessibilité. Cette fonctionnalité a été fournie dans Java 8u40, pour lequel JEP 204: JavaFX Accessibility a été implémenté.
jewelsea
5

Aller avec un modèle modèle-vue-présentateur à la place. Vous pouvez voir un bon exemple MVP dans Swing ici via le projet mvp4j .

Bien que je ne sois pas Swing, je consulterais également les articles MVP sur le site GWT Google Developers pour plus d'informations sur ce modèle et comment l'appliquer en Java; les mêmes principes de conception se tiennent indépendamment du cadre et GWT est très similaire à Swing.

Une description rapide du fonctionnement de MVP:

  • Affichage : une classe qui contient strictement vos composants GUI. Aucune connaissance de la logique ou du modèle, pas même des gestionnaires d'événements. Cela rend les vues très stupides, mais très jetables et modifiables.
  • Presenter : une classe qui gère votre logique d'application. Un présentateur se liera à une (ou plusieurs) classes d'affichage et gérera toute la logique d'application et le contrôle de modèle nécessaires.
  • Modèle : vos objets de modèle de données. Il est préférable de les garder aussi proches que possible de POJO (anciens objets Java simples).

Lorsqu'il est correctement implémenté, MVP rendra votre application très découplée et vous permettra d'apporter des modifications sans déranger les autres domaines de votre application.

Modifier: en fonction de votre décision d'utiliser JavaFX, je vous recommande de consulter les articles suivants

Tonnelier
la source
Je vous remercie! Je pense que j'ai décidé d'aller avec JavaFX, mais je vais lire sur MVP et comment il peut être utilisé avec cette plate-forme.
egor
1
Génial! Si vous décidez d'utiliser le modèle MVP, voici un lien qui fournit un exemple dans JavaFX code.google.com/p/pennychecker-presenter/wiki/JavaFxMvpExample
Cooper
2

Les widgets dont vous avez besoin se trouvent dans Swing ou SWT . La documentation contient des exemples de composants (Swing) ou de widgets (SWT), il sera donc assez facile de les identifier.

Swing est une bibliothèque GUI incluse dans JDK et construite à partir de zéro. SWT est externe et les composants sont basés sur des composants natifs.

Quant à MVC, ils ont tous les deux un support. Dans Swing, vous avez un modèle pour chaque composant qui fournit pratiquement les données sous-jacentes. Le composant lui-même est à la fois la vue et le contrôleur.

Adrian Ber
la source