Cela dépend un peu de votre plate-forme, mais certaines choses générales à garder à l'esprit
Versioning
Que se passe-t-il si vous mettez à jour votre application, tous les anciens plugins deviennent-ils obsolètes (le problème de Firefox)
Isolation Les
plugins peuvent-ils faire ce qu'ils veulent? Tu leur fais toujours confiance? Ou devez-vous les exécuter dans une sorte de bac à sable et demander des autorisations.
Mises à jour
Comment gérez-vous les mises à jour des plugins?
Sécurité
Comment garantissez-vous l'auteur d'un plugin, empêchez-vous l'usurpation d'identité ou que l'utilisateur soit incité à installer du code malveillant? Habituellement résolu par une sorte de signature de code
Sérialisation
Souvent, lorsque vous utilisez une isolation quelconque, vous devez sérialiser des informations entre différents threads ou processus. Comment procédez-vous le plus efficacement?
Extensibilité
Quels aspects devez-vous étendre? Comment maximiser le potentiel des plugins sans que l'API devienne trop lourde.
Si vous ciblez des développeurs tiers pour des plugins, je dirais que la chose la plus importante (d'après mon expérience) est de voir l'api et les classes de plugins comme complètement différents du reste de l'application, et de les rendre aussi faciles à développer pour que possible. Il est très facile pour l'architecture de l'application principale de «se fondre» dans les plugins afin que les auteurs de plugins doivent en apprendre beaucoup plus qu'ils ne le doivent. Rendez-leur la tâche facile, réfléchissez au type d'interface et d'expérience que vous souhaitez en tant qu'auteur de plugin.
Un autre bon état d'esprit est de ne pas penser comme "Le plugin fera toutes ces choses (dans le code) mais plutôt," le plugin doit fournir ces informations ". De cette façon, l'application peut consommer les informations nécessaires et faire le traitement réel qui simplifiera le plugin.
De manière générale, chaque fois que vous pouvez adopter une approche descriptive (métadonnées, comme xml) plutôt que du code, vous avez un gros avantage car les métadonnées sont plus faciles à transporter, à versionner, à déployer, à sécuriser et peuvent plus facilement être configurées par des tiers