Comment dois-je commencer lors du développement d'un système basé sur des modules ou des plugins?

StackOverflow https://stackoverflow.com/questions/78004

  •  09-06-2019
  •  | 
  •  

Question

Je compte développer un système entièrement basé sur des modules. La base du système doit pouvoir compter sur un support pour rechercher des plugins, les démarrer et pouvoir fournir des moyens de communication pour ces modules. Idéalement, on devrait pouvoir insérer de nouveaux modules et supprimer les modules inutilisés à volonté, et les modules devraient pouvoir utiliser la fonctionnalité de chacun si elle est disponible.

Ce système devrait être utilisé comme base pour les systèmes de simulation où beaucoup de choses se passent dans différents modules, et d'autres modules pourraient vouloir faire quelque chose en fonction de cela.

Le système que je souhaite développer sera en Java. De la façon dont je vois les choses, j’ai l’intention d’avoir un dossier avec un sous-dossier pour chaque module, qui inclut un XML décrivant le module avec des informations telles que le nom, les événements qu’il peut générer, etc. Je suppose que je pourrais avoir besoin d’écrire un ClassLoader personnalisé pour résoudre ce problème.

Le problème, c’est que je ne sais pas si mon idée tient vraiment dans l’eau et, bien sûr, j’ai l’intention de construire un prototype fonctionnel. Cependant, je n’avais jamais travaillé sur un système vraiment modulaire auparavant, et je ne sais pas vraiment quel est le meilleur moyen de résoudre ce problème.

Où devrais-je commencer? Existe-t-il des problèmes et des pièges communs rencontrés lors du développement de ce type de système? Comment faire en sorte que les modules parlent les uns avec les autres tout en maintenant l'isolation (c'est-à-dire que vous retirez un module et qu'un autre module qui l'utilisait reste sain d'esprit)? Existe-t-il des guides, des spécifications ou des articles que je peux lire qui pourraient me donner des idées sur les points de départ? Ce serait mieux si elles étaient basées sur Java, mais ce n’est pas une exigence, car ce que je cherche en ce moment, ce sont des idées, pas du code.

Tous les commentaires sont appréciés.

Était-ce utile?

La solution

Vous devez absolument consulter OSGi . Il s’agit de le mécanisme de composant / plug-in pour Java. Il vous permet de modulariser votre code (dans les «bundles») et de mettre à jour les bundles au moment de l'exécution. Vous pouvez également masquer complètement les packages d’implémentation de tout accès indésirable par d’autres bundles, par exemple. fournissez uniquement l'API.

Eclipse a été le premier grand projet open source à implémenter et à utiliser OSGi, mais il n’en a pas tiré parti (aucune installation / mise à jour de plug-in sans redémarrage). Si vous partez de zéro, cela vous donnera un très bon framework pour un système de plugin.

Apache Felix est une implémentation open source complète (et il en existe d'autres, comme Eclipse Equinox ).

Autres conseils

Sans entrer dans les détails, vous devriez regarder Spring et vous familiariser avec OSGI ou les frameworks Eclipse RCP. vous donnera également quelques concepts fondamentaux que vous devrez garder à l'esprit.

Une autre option est le ServiceLoader . ajouté en Java 1.6.

Il existe de nombreuses façons de le faire, mais vous pouvez utiliser quelque chose de simple en utilisant Reflection. Vous écrivez dans votre fichier XML le nom du fichier (ce serait une classe dans la réalité). Vous pouvez ensuite vérifier de quel type il s’agit et le créer avec réflexion. La classe pourrait avoir une interface commune qui vous permettra de déterminer si le fichier / la classe externe est réellement l'un de vos modules. Voici quelques informations sur la Réflexion .

Vous pouvez également utiliser un framework précodé comme celui-ci SourceForge. Ce texte du lien vous donnera une première bonne étape pour créer un module / plugin.

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