communication entre les plugins et le coeur d'une application POO

communication entre les plugins et le coeur d'une application POO - Java - Programmation

Marsh Posté le 30-03-2004 à 16:50:20    

J'ai un programme Java avec une interface graphique en SWING et ensuite les fonctionnalites du logiciel se regroupe sous forme de plugins.
 
au niveau architecture ca donne:
package toto.gui -> interface graphique principale
package toto.plugins.fonctionnalite1 -> un plugin
package toto.plugins.fonctionnalite2 -> un autre plugin
 
Depuis mes plugins je voudrais pouvoir modifier l'interface graphique generale de l'application (par exemple rajouter un sous-menu au niveau de la barre des menus).
 
J'aurais voulu trouve la maniere la plus elegante de le faire pour le code soit bien separe et modulaire (genre les messages entre les composants vont que dans un seul sens, le coeur de l'application en connait le moins possible sur les plugins, c'est les plugins qui se debrouillent avec ce qu'on leur donne comme infos du coeur de l'application pour pouvoir travailler).
 
J'avais pense faire un singleton de la classe principale (par exemple nomme GUI) de l'interface graphique genre ensuite on utilise comme ca:
 
GUI gui = GUI.getInstance(); //methode statique
MenuBar menuBar = gui.getMenuBar();
menuBar.add("toto" ); //on rajoute des elements a la barre de menus
ToolBar toolBar = gui.getToolBar();
...
 
Est une bonne idee ou peut-on faire mieux (SWING il kiffe bien les singletons ou pas) ?
 
J'avais aussi pense par heritage, genre la classe MenuBar est herite par les plugins pour qu'ils puissent ajouter des fonctionnalites, mais bon je vois pas comment ca pourrait se goupiller au final.
 
Ou alors une sorte de Factory pour les plugins.
 
Enfin bref je sais pas trop et j'aurais bien voulu avoir l'avis de personnes plus experimentes que moi. C'est quand meme un probleme assez commun nan ?
Aussi comment les plugins pourraient s'enregistrer au pres du coeur du programme sans que ce dernier ait a les instancier ? genre une solution dynamique ou les plugins s'inscrive a l'execution aupres du coeur de l'application (je pensais a des champs statiques)

Reply

Marsh Posté le 30-03-2004 à 16:50:20   

Reply

Marsh Posté le 31-03-2004 à 17:30:13    

perso pour mon soft j'ai crée une interface plugin:
 

Code :
  1. public interface Plugin {
  2.  /** retourne le nom du plugin */
  3.  public String getName();
  4.  /** Methode appelé par JChatIRC au chargement des plug in */
  5.  public void start(JChat prog);
  6.  /** methode appelée lorsque l'on arrete les plug in (lorsque l'on ferme l'application) */
  7.  public void stop();
  8.  /** Methode appelée lorsque l'on crée la barre de menu.  
  9.  **/
  10.  public void initMenu(JMenuBar menu);
  11. }


en gros tu file l'instance principale de ton soft a chaque plugin donc il peux faire ce qu'il veux.
 

Citation :

Depuis mes plugins je voudrais pouvoir modifier l'interface graphique generale de l'application (par exemple rajouter un sous-menu au niveau de la barre des menus).


 
pour les menus c'est la meme chose: au chargement de l'appli,tu file la menubar a tout tes plugins de facons a ce qu'il puisse ajouter des menus.
 
en supposant que plugins soit un tableau contenant tout tes plugins:
 

Code :
  1. for(int i=0;i<plugins.length;i++){
  2.     Plugin plugin=plugins[i];
  3.     plugin.initMenu(menu);
  4.    }


Message édité par veryfree le 31-03-2004 à 17:31:41
Reply

Marsh Posté le 01-04-2004 à 15:35:02    

veryfree a écrit :

perso pour mon soft j'ai crée une interface plugin


 
Ok nikel, merci bien
 
J'avais pense a ca au debut, mais j'avais peur que les plugins fasse n'importe quoi ensuite avec l'instance de la classe principale. J'avais alors pense faire heriter les classes manipulees par les plugins par des interfaces -> et donc c'est des interfaces que manipulent les plugins. Ou alors faire les methodes uniquement visible au niveau du package (j'ai jamais ete tres a l'aise avec parceque je viens du monde C++).
 
Si quelqu'un a d'autre idee, je suis preneur :)
 
Quelqu'un sait comment fonctionne les plugins de Eclipse ?

Reply

Marsh Posté le 01-04-2004 à 15:39:00    

tanguy a écrit :


 
Ok nikel, merci bien
 
J'avais pense a ca au debut, mais j'avais peur que les plugins fasse n'importe quoi ensuite avec l'instance de la classe principale.

tu fais une interface et tu file que l'interface aux plugins.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 01-04-2004 à 15:44:18    

nraynaud a écrit :

tu fais une interface et tu file que l'interface aux plugins.


 
J'avais alors pense faire heriter les classes manipulees par les plugins par des interfaces -> et donc c'est des interfaces que manipulent les plugins.
Bon c'est vrai que tu le dis plus simplement et elegamment :)
 
Sinon je me repond a moi-meme pour les plugins d'Eclipse:
C'est ecrit dans la FAQ de la premiere page: http://eclipse.org/eclipse/faq/eclipse-faq.html#plugin il y a des articles aussi sur le site d'IBM


Message édité par tanguy le 01-04-2004 à 15:59:57
Reply

Marsh Posté le 15-04-2004 à 15:22:45    

Tu peux faire une Classe Façade (Singleton ou méthodes statiques)qui
propose des services de modification de l'interface graphique.
Elle pourrair alors faire des vérifications sur ce que font les plugins
et rétablir les choses si besoin est.  

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed