Logica di convalida di esclusione reciproca complessa

4

Ho bisogno di convalidare alcuni input di form in modo complesso. Per es.

<select id="options" multiple="multiple">  
<option>A</option>  
<option>B</option>  
<option>C</option>  
<option>D</option>  
<option>E</option>  
</select>  

Ad esempio, se l'utente seleziona A e B, l'utente dovrebbe ricevere un errore se l'utente seleziona anche D.

Nota, sto cercando di mantenere questa regola aziendale in un livello separato da questo codice dell'interfaccia utente, che potrebbe essere una forma completamente diversa, ad es. caselle di controllo, trascina e rilascia, aggiungi / elimina opzioni con possibili campi di accompagnamento.

Sto cercando un framework, un modello di progettazione o un altro modo elegante per codificare questa logica, preferibilmente in definitiva attraverso gli attributi di convalida in un modello.

    
posta blindcodifier9734 04.05.2013 - 08:00
fonte

3 risposte

1

Avvicinarsi alla domanda da un'angolazione diversa: perché non disabilitare D se l'utente seleziona A e B? Quando ho questo tipo di domanda, comincio a pensare di rivedere il mio flusso dell'interfaccia utente.

    
risposta data 10.05.2013 - 04:09
fonte
1

Per rappresentare la logica di convalida dei tuoi input, puoi utilizzare una mappa di Karnaugh , in cui gli input sono lo stato di selezione di A, B, C, D ed E, e il risultato è lo stato di convalida di ciascuna combinazione di input.

  AB-CDE | 000 | 001 | 011 | 010 | 110 | 111 | 101 | 100 |
 --------+-----+-----+-----+-----+-----+-----+-----+-----+
  00     |     |     |     |     |     |     |     |     |
 --------+-----+-----+-----+-----+-----+-----+-----+-----+
  01     |     |     |     |     |     |     |     |     |
 --------+-----+-----+-----+-----+-----+-----+-----+-----+
  11     |     |     |  0  |  0  |  0  |  0  |     |     | -> Error if (A.B).D
 --------+-----+-----+-----+-----+-----+-----+-----+-----+
  10     |     |     |     |     |     |     |     |     |
 --------+-----+-----+-----+-----+-----+-----+-----+-----+

Da quella mappa, puoi trovare l'espressione logica minima che convalida le tue caselle di controllo.

    
risposta data 24.06.2013 - 11:45
fonte
0

La maggior parte dei framework può essere convalidata a livello di modello. Quindi dovrebbe essere sufficiente. Quindi convalidi al livello più basso possibile.

Esempio: link

Se vuoi mostrarlo nell'interfaccia (con ajax per esempio) devi solo chiamare il modello per convalidarlo (probabilmente tramite il controller). Crea un metodo nel controller come: validateOptions () e invia una chiamata ajax ad esso in modo da poter modificare l'interfaccia utente.

Quando il salvataggio effettivo della convalida verrà eseguito di nuovo per garantire che sia corretto.

    
risposta data 24.06.2013 - 10:56
fonte

Leggi altre domande sui tag