Sto sviluppando un'applicazione che consente agli utenti di scrivere script C #. Questi script consentono agli utenti di chiamare metodi selezionati e di accedere e manipolare i dati in un documento. Funziona bene, tuttavia, nella versione di sviluppo, gli script accedono direttamente alle strutture di dati (interne) del documento. Ciò significa che se dovessimo modificare il modello / struttura dei dati interni, ci sono buone probabilità che lo script di qualcuno non venga più compilato. Ovviamente vogliamo evitare che questo cambiamento di rottura accada, ma vogliamo comunque consentire all'utente di scrivere codice C # sensibile (pur non limitando il modo in cui sviluppiamo il nostro modello di dati interno come risultato). Pertanto, abbiamo bisogno di disaccoppiare la nostra API di scripting e le sue strutture di dati dai nostri metodi interni e dalle strutture di dati.
Abbiamo alcune idee su come possiamo consentire all'utente di accedere a quella che è effettivamente una versione pubblica stabile dei dati interni del documento *, ma ho voluto lanciare la domanda là fuori a qualcuno che potrebbe avere qualche reale esperienza di questo problema. NB la struttura dei dati del nostro documento interno è abbastanza complessa e potrebbe essere piuttosto difficile da avvolgere. Sappiamo di voler esporre il meno possibile nella nostra API pubblica, specialmente perché una volta che è là fuori, è fuori là per sempre.
Qualcuno può aiutarti?
-
In che modo i linguaggi / le API di scripting separano le loro API pubbliche e le loro strutture dati dalle loro strutture di dati interne?
-
Non c'è una vera alternativa al dover scrivere un livello di interazione complesso?
Se abbiamo bisogno di fare questo, qual è un buon approccio o modello per avvolgere strutture di dati complesse che includono oggetti nidificati, comprese le collezioni? Ho esaminato il modello di facciata dell'API, che sembra stia cercando di risolvere questo tipo di problemi, ma ci sono alternative?
* Un'idea è di costruire una facciata di dati che sia mantenuta stabile attraverso le versioni della nostra applicazione. La facciata espone un set di oggetti di dati facciata che vengono utilizzati nel codice dello script. Mantengono la retrocompatibilità e avvolgono l'accesso al modello di dati del nostro documento interno.