Come posso fornire un controllo a livello di modifica utente sulle formule attualmente codificate?

2

Situazione attuale

Gestisco un sito Web con un modulo semplice che gli utenti compilano con semplici dati di progettazione. Premono Submit e il codice PHP prende il sopravvento e fa varie aritmetiche di base su quei numeri, secondo le formule codificate .

Ogni volta che c'è un cambiamento, l'utente deve parlare con me, e devo cambiare le formule nel codice, e quindi aggiornare il repository.

L'utente ha richiesto il controllo sulle formule. Potrei dare loro l'accesso al codice, ma non sono un programmatore e i cambiamenti sono abbastanza rari da dove molto probabilmente finirò per aiutarli comunque. Come in, potrei anche mantenere l'accesso al codice da solo.

Excel sull'approccio Web

Un altro modo per farlo è implementare il sottoinsieme di "Excel sul Web", in quanto essenzialmente questa è la funzionalità richiesta. Come se non ne sono sicuro. Inoltre, l'output di formule viene utilizzato in diversi pezzi di codice mission-critical, quindi non è solo eccellente sul web dove si inseriscono formule e si vedono i risultati senza ulteriori azioni. L'output delle formule viene utilizzato nel codice critico utilizzato per gestire varie altre funzionalità. Aka, ho bisogno di un codice modificabile dall'utente, i cui risultati posso ricollegarlo al codice sorgente principale.

eval approach

Potrei avere una casella in formato libero in cui l'utente inserisce un codice PHP specifico e quindi uso solo eval per ottenere il risultato desiderato, ma eval apre un enorme buco di sicurezza sul sito web.

Approccio al parser

Potrei fare come sopra ma invece di eval , implementare un parser completo che fa la funzionalità di Excel limitata per me. Mi sto appoggiando a questo modo, ma non so davvero come impostarlo al meglio, poiché scrivendo il mio parser personale potrei finire per fare un sacco di lavoro. Ad esempio, l'interfaccia dovrebbe essere "per riga" o "casella di forma libera"? La codifica dell'interfaccia può diventare una notevole quantità di lavoro in sé. La codifica dell'interfaccia impropria può essere ancora più utile se in un secondo momento dovrà essere abbattuta, al fine di implementarne una migliore.

Domanda

Quale è un buon modo per consentire all'utente di modificare il controllo su formule che sono attualmente codificate nel codice, ma senza che questo diventi un progetto enorme?

Solo per ridimensionare, forse qualcosa che può essere implementato entro una o due settimane, incluso il test.

    
posta Dennis 09.08.2016 - 00:10
fonte

2 risposte

3

Esternalizzalo.

Solo pochi giorni fa, Microsoft ha aperto l'API REST di Office 365 Excel per lo sviluppo generale. Si suggerisce che questi calcoli potrebbero essere fatti in Excel, quindi questa mi sembra una soluzione molto logica. I documenti sono qui .

Se ciò non funziona per te, ti consigliamo di utilizzare ANTLR o un altro generatore di parser per creare un linguaggio specifico del dominio per il tuo utente finale. Hai ragione a non volere eval() di codice arbitrario. Il parser ti darà un controllo più dettagliato, ma sarà anche più difficile da implementare e gestire rispetto alla codifica con l'API di Excel Web.

    
risposta data 09.08.2016 - 00:22
fonte
3

Il linguaggio Symfony Expression ( link ) potrebbe soddisfare le tue esigenze. "Offre un motore che può compilare e valutare espressioni", consentendo di eseguire le formule in un ambiente sandbox.

    
risposta data 09.08.2016 - 01:13
fonte

Leggi altre domande sui tag