• # la base

    Posté par (site web personnel) . En réponse au message développement d'un système de plugin. Évalué à 2.

    Si tu te bases sur un langage objet qui possède des fonctionnalités d'introspection (en gros la possibilité de demander des infos sur le programme en soit), c'est très facile : un plugin doit implémenter une interface bien précise qui répond à certaines fonctionnalités qu'il doit remplir, puis tu décide d'un moyen d'encapsulation : par exemple un jar en Java, et hop ensuite tu écris un morceau de code qui cherche dans un dossier "addons" ces plugins et tu les charge dynamiquement avec les méthodes qui vont bien.
    Bon je suis pas sûr que je sois bien clair, mais d'un point de vue technique c'est extrêmement simple.
    Après ça se complique si tu veux contraindre tes plugins, les isoler, etc.

    Voilà par exemple la liste des méthodes que tu pourrais trouver dans une interface définissant un plugin d'export de données (très sommaire) :

    interface MyApplication.MyExportInterface
    getName() : string
    getVersion() : string
    SaveData(datas : MyApplication.MyPersistentData, URL : string)
    getSupportedFormat() : StringCollection

    Ensuite l'algo général de chargement des plugins au lancement de ton application (toujours dans un pseudo code) :

    string location = "~/.MyApplication/addons/"
    foreach bin in location
    if bin implements MyExportInterface
    mesplugins.add(bin.createInstance)
    endif
    endforeach

    Libre à toi de remplacer le getSupportedFormat et le SaveData par ce que tu veux offrir comme possibilité aux plugins.