74 votes

Conception de logiciels extensibles (architecture de plugin)

J'ai besoin de quelques ressources que parler de la façon de concevoir votre logiciel pour être extensible, c'est à dire afin que d'autres personnes peuvent écrire des add-ons/plugins qui ajoute des fonctionnalités.

Que recommandez-vous? Toute ouvrages qui traitent de ce sujet?
Je préfère quelque chose de plus c'est court et au point; un peu de théorie et un tas d'exemples concrets.

Je ne suis pas le ciblage d'une langue spécifique, je veux être en mesure de comprendre l'idée de base afin que je puisse la mettre en œuvre dans n'importe quelle langue.

Et pour la même raison, je préfère ne pas le faire à l'aide d'un cadre que quelqu'un d'autre construit (à moins que le cadre n'est pas très haut niveau, c'est à dire de ne pas cacher trop bien), pour le moment, je veux seulement me renseigner sur le sujet et à expérimenter avec différentes façons de la mettre en œuvre. De Plus, un cadre suppose généralement la connaissance de l'utilisateur sur le sujet.

Mise à JOUR

Je ne suis pas de demander à propos de la programmation orientée objet ou de permettre à mes cours pour être héritée. Je parle de la conception d'une application qui sera déployé sur un système, de sorte qu'il peut être étendu par des tiers addons APRÈS son déploiement.

Par exemple, Notepad++ possède une architecture de plug-in où u lieu d'un .fichier dll dans le dossier plugins, et il ajoute des fonctionnalités à la demande qui n'était pas là, comme la couleur, la cueillette ou l'insertion de fragments, ou bien d'autres choses (un large éventail de fonctionnalités).

24voto

boost Points 3169

15voto

VonC Points 414372

OSGI est un bon exemple pratique d'un cadre technique permettant de faire ce que vous êtes après.

La théorie est ici.

L' (gratuit!) le livre est là.

De l'extensibilité et de la capacité à écrire le plugin doit composer avec le cycle de vie des services

  • ajout / retrait de service/plugin sur le spot
  • la gestion des dépendances entre les services
  • la gestion des états de services (déclarée, de l'installation, démarrage, à l'arrêt,...)

Qu'est-ce que OSGI ?

L'une des principales fonctions d'un module est une unité de déploiement... quelque chose que nous pouvons construire ou de la télécharger et de l'installer pour étendre les fonctionnalités de notre application.

Vous trouverez une bonne introduction ici, sur la notion centrale de service (qui est liée à votre question, et ce qui explique certains des problèmes autour des services, élément clé pour l'extensibilité).

Extrait:

Pourquoi alors si important, si de nombreuses applications peut être construit sans eux? Ainsi, les services sont le meilleur moyen connu pour découpler les composants logiciels les uns des autres.

L'un des aspects les plus importants de services est qu'ils ont considérablement réduire le chargement des classes de problèmes parce qu'ils travaillent avec des instances d'objets, pas avec des noms de classe. Les Instances qui sont créés par le fournisseur, et non le consommateur. La réduction de la complexité est assez surprenant

Non seulement les services de minimiser la configuration, ils ont aussi de réduire considérablement le nombre de partage des paquets.

4voto

Aaron Digulla Points 143830

Vous essayez d'atteindre deux objectifs opposés:

  1. Les composants de votre logiciel doit exposer beaucoup d'eux-mêmes, de sorte qu'ils peuvent être réutilisés
  2. Les composants de votre logiciel doit exposer très peu d'eux-mêmes, de sorte qu'ils peuvent être réutilisés

Explication: afin D'encourager la réutilisation du code, vous devriez être en mesure d'étendre les classes existantes et appeler leurs méthodes. Ce n'est pas possible lorsque les méthodes sont déclarées "privé" et les classes sont "définitifs" (et ne peut pas être prolongé). Donc, pour répondre à cet objectif, tout doit être public et accessible. Pas de données personnelles ou de méthodes.

Lorsque vous relâchez la deuxième version de votre logiciel, vous trouverez que de nombreuses idées de la version 1 ont été simplement faux. Vous avez besoin de changer le nombre d'interfaces ou de votre code, les noms de méthodes, de supprimer les méthodes, le saut de l'API. Si vous faites cela, beaucoup de gens vont se détourner. Ainsi, pour être en mesure de faire évoluer votre logiciel, les composants ne doivent pas exposer tout ce qui n'est pas absolument nécessaire -, le coût de la réutilisation du code.

Exemple: j'ai voulu observer la position du curseur (caret) dans une SWT StyledText. L'accent circonflexe n'est pas destiné à être étendu. Si vous le faites, vous verrez que le code contient des contrôles comme "c'est cette classe dans le package org.eclipse.swt" et un grand nombre de méthodes sont privés et final et autres joyeusetés. J'ai dû copier sur 28 classes de SWT dans mon projet juste pour mettre en œuvre cette fonctionnalité, car tout est verrouillé.

SWT est un beau cadre pour l'utilisation et l'enfer à l'étendre.

3voto

LenW Points 1336

Bien sûr, il y a le fameux principe Open Closed - http://en.wikipedia.org/wiki/Open/closed_principle

2voto

joemoe Points 2552

Eh bien cela dépend de la langue.

  • En C/C++ je suis assez sûr qu'il y est une fonction loadlibrary qui vous permet d'ouvrir une bibliothèque à l'exécution et à l'appeler de fonctions exportées. C'est généralement la façon dont c'est fait en C/C++.
  • Dans .NET, il y a de la Réflexion, qui est offre similaire (mais plus large) de la fonction loadlibrary. Il y a aussi des bibliothèques entières, construit à la Réflexion, comme Gérées Cadre de l'Extension, ou Mono.Addins que la plupart ne le levage lourd pour vous déjà.
  • En Java, il y a aussi de Réflexion. Et il y a les JPF (plug-in Java, Framework) qui est utilisé dans des trucs comme Eclipse IIRC.

Cela dépend du langage que vous utilisez, je recommanderais une tutoriel/livres. J'espère que cela vous a été utile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X