Question

Je suis sur le point de factoriser une application Swing d'utiliser ActionListeners à des classes d'action parce que je réalisais que beaucoup de mes éléments de menu vont être utilisés dans une barre d'outils ainsi.

En ce moment j'ai appelé la classe ImportExport qui traite de l'état du modèle sous-jacent et affiche ensuite les boîtes de dialogue d'utilisateur appropriés. ImportExport a les fonctions save(), saveAs() et open(). Lorsqu'un utilisateur clique sur l'élément de menu « Ouvrir », l'auditeur d'action appelle open(), open() vérifie d'abord si le modèle a des changements et si tel est le cas affiche une boîte de dialogue demandant à l'utilisateur s'il veut sauver d'abord. Maintenant, si l'utilisateur clique « Oui » open() appelle save() qui effectue à nouveau des contrôles et affiche les boîtes de dialogue de l'utilisateur. save() est assez persistante: La seule façon de sortir de cette action est soit en enregistrant avec succès ou l'utilisateur de décider qu'il veut annuler. Je compte fortement sur les commentaires que save() fournit et si un utilisateur veut annuler annuler également la fonction open() appelant.

Je voulais diviser la classe ImportExport en trois classes (OpenAction, SaveAction & SaveAsAction), chacun d'entre eux et, finalement, AbstractAction le sous-classement se débarrasser de la classe ImportExport. Et c'est là pose mon problème: Comment puis-je dire la SaveAction d'exécuter si l'utilisateur veut enregistrer le modèle avant d'ouvrir un autre? Et comment puis-je obtenir des commentaires si l'utilisateur décide d'annuler?

Est-ce même la bonne approche? Je n'aime pas avoir le code dupliqué dans la sauvegarde et l'action ouverte et je l'ai déjà mis autant de fonctionnalités que possible dans mon modèle sous-jacent, mais les boîtes de dialogue utilisateur sont obiously sur place, il est donc ce pas le choix. A été conçu Action tout pour tenir ce genre de fonctionnalité ou sould je continue ma classe ImportExport et simplement déléguer toute action appelle aux fonctions appropriées dans ImportExport. Comment utilisez-vous Actions?

Était-ce utile?

La solution

J'ajoute parfois une action « contrôleur » quand il y a un arbre de décision en cause. OpenAction, SaveAction et SaveAsAction seraient sous-classe ce contrôleur d'action. L'action du contrôleur déterminera l'état du modèle et demander plus d'informations de l'utilisateur, le cas échéant, puis appeler la sous-classe correcte.

Autres conseils

Je voudrais créer une classe ImportExportController, ayant ces méthodes: open, save, saveAs. Ce contrôleur connaîtrait la logique métier.

Mes classes Action ne contiendraient pas beaucoup de logique métier. Ils n'appeler le contrôleur.

Mais ces actions contiendraient toutes les étiquettes, les icônes, l'accélérateur ... qui doivent être affichés dans JButton, JMenuItem, etc.

Pour moi, Actions sont des classes orientées GUI, utilisés pour la commodité (et ils sont très pratique!), Mais pas de cours dédié pour gérer la logique métier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top