Lors de la conception d'une plate-forme logicielle, quels sont les éléments clés qui composent une architecture réussie connectables?

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

Question

J'ai été vraiment impressionné par le nombre croissant de plates-formes logicielles qui permettent aux développeurs extérieurs contribuent le code à travers une architecture connectable (plugins / extensions).

J'étudie les plates-formes ont les meilleures communautés plug-ins ...

Excellente Architectures Plugin avec les communautés de plug-in en plein essor:

Ensuite, il y a des plates-formes avec les communautés plugin moins actives:

(Par souci de mise au point, nous allons mettre de côté ou ignorer les plates-formes qui permettent aux applications logicielles à part entière, comme Microsoft Windows, iPhone et Facebook.)

Que diriez-vous donne une plate-forme logicielle d'une architecture de plug-in réussie avec beaucoup de plugins, par rapport à une autre plate-forme avec une communauté de développeurs plus petit ou inactif?

Juste pour faire avancer les choses ont commencé, voici une liste partielle:

  • La plate-forme fait quelque chose largement utile. Les gens qui le naviguer sur le Web, acheter et vendre des choses, publier des blogs et des forums, etc
  • La plate-forme est open source (ou au minimum, le code source est librement disponible).
  • Toutes les fonctions importantes dans la plate-forme sont entièrement plugabble par des crochets et des filtres.
  • Toutes ou la plupart des fonctions sont connectables bien documentés (ou il y a un wiki afin que les développeurs peuvent documenter pour vous).
  • Il y a une liste de forum ou par courrier électronique où les développeurs peuvent partager des plugins et des conseils et astuces partage
  • Il y a une liste de forum ou par courrier électronique où les utilisateurs moins sophistiqués peuvent obtenir de l'aide et la configuration de l'installation des plug-ins.

Quel genre de choses peut un développeur de plateforme faire pour créer une architecture connectable qui encourage beaucoup de développeurs externes de créer des plugins?

Était-ce utile?

La solution

Personnellement, il y a 3 grandes contributers si j'apprends à (et faire) écrire des applications pour un système donné:

Le système est très utile pour que je veux l'utiliser assez pour être assez motivé pour prolonger?

Est-ce le système en utilisant une langue que je connais, ou est facile à apprendre, par opposition à une solution obscure ou propriétaire ou autrement trop compliqué (voir elisp)?

Le système de plug-in très bien documenté dans un langage clair pour que je puisse aller sur le travail de l'écriture de mon plug-in et non passer des heures (ou jours) déchiffrant le système?

Si ces choses sont vraies, la seule raison pour laquelle vous ne voudriez pas développer une plate-forme est que quelqu'un d'autre a déjà écrit des plugins pour toutes vos idées. :)

Je pense qu'il est aussi très utile / important d'avoir un dépôt central et bien connu pour abriter l'utilisateur plugins contribué (selon vos projets, par exemple). Je déteste avoir à parcourir le Web pour trouver personne, peut-être de mauvaise qualité ou même éventuellement malveillants add-ons pour quelque chose que je suis en train de faire. Cela devrait être un site Web ou wiki comme forums ou même les archives de la liste de diffusion peuvent être ennuyeux et beaucoup de temps à creuser à travers.

Autres conseils

Vous êtes absent le point.

La machine virtuelle Java est une architecture connectable. Chaque fichier de classe se branche et prolonge.

Apache est une architecture connectable à plusieurs niveaux. Il y a les « mods ». Certains mods fonctionnent d'autres interprètes, qui sont eux-mêmes architectures connectables. PHP, mod_wsgi / Python, etc sont tous branché sur Apache.

Python est une architecture connectable avec les fichiers de Python et les fichiers objets (.DLL de, .SO de) qui se branchent en elle.

Chaque cadre linguistique est - en effet -. Une architecture connectable

La plate-forme est une fondation

Une vue d'une plate-forme logicielle est comme une base sur laquelle repose un autre logiciel pour effectuer une autre tâche. Cela peut couture une déclaration simple et assez évident, mais il est important.

Les bases doivent être faciles

Une plate-forme doit avoir un but et les développeurs de la plate-forme doit être au courant de ce lors de la conception des API afin qu'il devienne évident que les cas d'utilisation primarry sont et les API autour d'eux doit être aussi straightford que possible d'utiliser par rapport à la façon ils sont conçus, mais aussi par rapport à la doccumentation autour d'eux.

Points d'extension devraient être Obvious

Extensibilité dans un platoform est de fournir aux développeurs la oppotunity de prolonger ou modifier la plate-forme. Si cela est quelque chose que vous voulez encourager alors vous devez très clairement la nature et les limites de cette extension et fournir un ensemble bien défini d'interfaces pour permettre cela.

Cela pourrait tout sembler évident, mais si vous voulez une communauté à se développer autour d'une plate-forme, cette plate-forme doit avoir une utilisation et l'extension devrait être une expérience simple.

Désolé si cela coud un peu « achitectural astronaught », je pense avoir fait quelques bons points, je peux bien avoir faits mal, ne hésitez pas à le signaler ou les ajouter à

Ne pas oublier Eclipse (avec > 1000 enregistré 3ème partie "plug-ins" (en fait, ils sont faits de plugins encore plus petits dans la terminologie Eclipse)). Une partie de son succès peut venir de ce qu'il ya de bonnes règles de base sur la façon de concevoir un plug-in qui est également extensible par d'autres. Il y a aussi une politique stricte de versionnage API (qui bien sûr a ses inconvénients, aussi).

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