Sto lavorando su un sistema, che richiede la convalida dell'input con vincoli tra diversi valori di input. Oltre alla convalida dell'input, dovrebbe esserci anche l'inferenza in base ad altri valori configurati.
Per essere più concreti, una libreria di algoritmi deve essere configurata usando una finestra di dialogo. Tutti i parametri della libreria hanno intervalli predefiniti o set di valori definiti. Ad esempio inizialmente un elenco a discesa per il parametro bitrate offre i valori 16kbps, 32kbps, 64kbps, 128kbps per la selezione. Allo stesso modo, un elenco a discesa per il parametro Blockize viene inizializzato con i valori 64, 128, 256, 512. Tuttavia solo alcune combinazioni di bitrate e blocchi sono supportate dalla libreria:
- il bitrate 16kbps supporta i blocchi 64, 128
- bitrate 32kbps supporta i blocchi 128, 256
- bitrate 64kbps supporta i blocchi 128, 256, 512
- bitrate 128kbps supporta blockize 512
Quindi, non appena viene selezionato il bitrate 32kbps, l'elenco dei blocchi selezionabili nell'elenco a discesa deve essere limitato a 128, 256. Se l'utente decide di selezionare il blocco prima del bitrate, ad esempio sul valore 256, le opzioni del bitrate devono essere vincolate a 32kbps, 64kbps.
Ci devono essere anche parametri, che hanno intervalli di intervallo, ad esempio un parametro di ritardo, che deve essere nell'intervallo [0, blocca * 2]. In altre parole ci sono vincoli aritmetici come 0 < = DELAY < = BLOCKSIZE * 2. Durante la ricerca di tecnologie ho scoperto i risolutori di vincoli sofisticati come ECLiPSe-CLP . Ma inferire "possibili valori" dei parametri conoscendo i valori degli altri usando tali sistemi sembra essere eccessivo.
In pratica ci sono centinaia di parametri alcuni dei quali sono soggetti a tali dipendenze.
Quindi, mentre sembra fattibile incidere una soluzione, sto cercando alcune best practice per gestire tali condizioni / vincoli. Questo sembra essere un problema abbastanza comune nella progettazione dell'interfaccia utente. La ragione per cui l'hacking di qualcosa è problematico è che vogliamo riutilizzare la logica per la convalida dell'input in un altro posto. Per uno c'è un'applicazione GUI per creare configurazioni per una libreria e poi c'è la libreria stessa, che dovrebbe inizializzare correttamente per le configurazioni ritenute valide dalla GUI, e rifiuta tutte le altre configurazioni con un messaggio di errore.
Quali sono le migliori pratiche per gestire un tale sistema di vincoli in modo che possano essere archiviati in modo dichiarativo per esempio in un database?
Ovviamente il problema di per sé è banale, ma sono sicuro che sia integrabile in un framework generico.
Sono graditi tutti i riferimenti alla letteratura accademica o pratica (o anche alla terminologia che consente un'ulteriore ricerca sul Web).