Qual è la migliore struttura dati per rappresentare i limiti delle regole?

0

Immagina di avere una serie di scelte con diversi set di valori ma anche la possibilità di inserire un valore libero (di solito un numero)

per es.

<select name="choiceA">
    <option value="One"> 
    <option value="Two"> 
    ....
    <option value="Nth">
</select>

o

<input name="freeNumChoice type="number"/>

Non tutte le combinazioni sono possibili, quindi devo rappresentare regole di esclusione in alcune strutture dati.

Non sto chiedendo la sintassi del linguaggio, ma di più su come i dati creano le mie regole per le combinazioni.

Il linguaggio di programmazione sarebbe javascript e i dati per le regole sarebbero espressi come documenti JSON.

Regole possibili di esempio (pseudo codice)

choiceUna lista bianca solo o1, o2, o3 (opzioni) per la sceltaB

choiceE blacklists choiceA's o1

choiceC se maggiore di 5 quindi whitelist solo o1 per choiceB

cosa suggeriresti? c'è intorno alla teoria delle formiche su questo problema (sembra essere comune)

grazie

    
posta koalaok 14.02.2017 - 09:10
fonte

2 risposte

3

Ho scritto una volta un'applicazione web che ha una serie di opzioni complesse che dipendono l'una dall'altra. L'approccio usato per memorizzare questa relazione e le regole in un database è rappresentare le regole come una macchina a stati.

Ho progettato una macchina a stati usando un editor di macchine a stato grafico (ho usato Fizzim ), e poi ho convertito il file di output in un numero di voci in due tabelle del database: stati e transizioni. Nella mia progettazione, negli attributi degli stati scrivo le regole che limitano le scelte disponibili all'utente in quel punto e negli attributi delle transizioni scrivo regole che rappresentano le condizioni che la scelta deve soddisfare per passare ai nodi successivi .

Quindi il server invia gli stati e le regole di transizione in un formato che può essere letto da Javascript. Il Javascript utilizza queste tabelle macchina dello stato per mostrare / nascondere opzioni / campi in base alle selezioni dell'utente e alle regole dello stato e delle transizioni, e ho anche uno script lato server che convalida le scelte che l'utente invia in base allo stesso stato e tabella di transizione .

Il risultato è molto solido in quanto ho solo bisogno di implementare il codice per interpretare le condizioni in ogni stato, piuttosto che dovermi preoccupare di tutte le combinazioni.

    
risposta data 14.02.2017 - 15:18
fonte
2

Per teoria dovresti probabilmente iniziare con il programma di soddisfazione dei vincoli . Il modo in cui farei questo è creare un metodo di convalida per ogni tipo di regola e aggiungere un campo tipo da mappare al metodo. Puoi anche usare javascript per cercare la funzione direttamente da questo nome. Il primo parametro sarebbe il valore che si desidera controllare e il resto dei dati nell'oggetto json sarebbero i parametri rimanenti che la funzione utilizzerà per valutare i dati. Questo ti permette di avere parametri opzionali nella tua regola.

IMPORTANTE: non devi fare affidamento sulla convalida sul lato client. Tutto ciò che stai facendo con javascript nel browser dell'utente può essere sovvertito. È inoltre necessario assicurarsi che le convalide siano implementate sul lato server.

    
risposta data 14.02.2017 - 15:55
fonte

Leggi altre domande sui tag