Come faccio a consentire ad altri sviluppatori di integrare i moduli nel mio generatore di contenuti?

-1

Sfondo: Sto costruendo un'app desktop in cui la capacità dell'utente di sviluppare mod è fondamentale. Alle sue ossa è un generatore di contenuti in cui il contenuto ha molti livelli e gli utenti possono sviluppare il proprio codice per inserire / generare contenuti a qualsiasi livello. Tutti questi moduli sviluppati dall'utente sarebbero disponibili per l'utente sulla GUI principale oltre ai moduli preconfezionati, in cui possono selezionare i moduli che verranno utilizzati e configurare opzioni generiche e specifiche del modulo prima di iniziare il processo di generazione. Le ragioni di questo design includono l'integrazione di moduli di più persone in un risultato finale, oltre alla parallelizzazione, l'I / O su file e tutte le altre difficili sfide gestite dall'app in modo che lo sviluppatore possa solo preoccuparsi della generazione di contenuti. / p>

Questo porta al problema dell'approccio di base da adottare quando si determina come consentire loro di integrare i propri moduli. Devo loro produrre librerie compilate con determinate interfacce e leggerle in fase di runtime? Dal momento che questo è probabile che sia pubblicamente su github, posso semplicemente consentire loro di estendere le classi di base e compilare l'intera cosa da soli? La moddability è meglio servita dall'estensione delle classi o dalla comunicazione tra oggetti?

Per quanto posso dire, devo usare Java, se questo influenza le scelte progettuali che prendo. L'app deve essere eseguibile su win / mac / linux e vanificherebbe lo scopo se le persone che hanno sviluppato mods potevano solo condividerle con persone del proprio sistema operativo. Anche se potrei ricorrere allo scripting per le mod e semplicemente compilare l'app principale per tutti i diversi SO, non sono sicuro che sia la scelta giusta per questo progetto. Forse anche questo fa parte di questa domanda.

    
posta James 29.07.2017 - 16:27
fonte

2 risposte

2

Dato che stai usando Java (o davvero la JVM), è piuttosto semplice. Puoi caricare i file di classe in fase di esecuzione . Questa è quasi certamente la cosa più comoda per i tuoi utenti finali. Fondamentalmente, per "installare" un plugin, copieranno i file class o jar in una directory che la tua applicazione principale cercherà all'avvio (o quando vuoi). Devi solo usare ClassLoader per caricare i file di classe ottenendo un Object e quindi lanciarli nell'interfaccia appropriata. Puoi prendere in considerazione variazioni su questo incluso il caricamento dalla rete.

Tutto quello che devi fare è dichiarare le interfacce che gli sviluppatori plug-in implementeranno. Probabilmente vorrai separarli nel loro pacchetto in modo da poter distribuire più facilmente un kit per sviluppatori di plug-in o almeno chiarire cosa è e cosa non fa parte dell'API del plugin. Probabilmente vorrai un'interfaccia che tutti i plugin debbano implementare e che fornisca metadati. Ciò ti consente di interrogare il plug-in per sapere che tipo di plug-in è (se ne hai di diversi), quali versioni dell'applicazione principale supporta e qualsiasi altra cosa che potrebbe essere utile per es. restrizioni sul sistema operativo. Vuoi passare un po 'di tempo a pensare a come modificare le versioni della tua applicazione principale.

    
risposta data 30.07.2017 - 06:55
fonte
2

This leads to the problem of the base approach to take when determining how to let them integrate their modules. Do I have them produce compiled libraries with certain interfaces and read them in at runtime?

Questo è l'approccio che ho preso prima. Definisci un ABI 1 che i tuoi utenti possono costruire contro e crei anche un meccanismo in modo che possano registrare i loro componenti con la tua applicazione.

Questo ha anche il vantaggio di costringerti ad essere più rigoroso nel modo in cui strutturi la tua applicazione e come accedi ai moduli degli utenti.

do I just let them extend base classes and compile the whole thing themselves?

IMHO questa è la cosa sbagliata da fare. Ora non hai alcun controllo su come gli utenti si interfacciano con la tua applicazione. Quindi, quando ricevi lamentele su come le loro mod non funzionano, non avrai idea di come supportarle, in modo che tu debba capire gli interni del loro codice. Oltre ad arrivare a questo punto, i tuoi utenti dovranno avere una profonda conoscenza del tuo codice.

Il ben definito ABI minimizza questi problemi.

1. ABI Interfaccia binaria delle applicazioni

    
risposta data 29.07.2017 - 16:53
fonte

Leggi altre domande sui tag