Il motore di regole è una parte fondamentale dello strumento configuratore, poiché consente di mettere in relazione i valori delle varie scelte, imponendo e verificando i vincoli e la congruenza di quello che stiamo configurando.

Esistono due famiglie principali di motori di regole: motori di tipo gerarchico e motori di tipo dichiarativo. Nel caso di configuratori con motore gerarchico, vengono implementati dei percorsi validi di scelta, con degli step ben definiti e al termine di ciascuno dei quali viene effettuato il controllo di congruenza. I configuratori in stile wizard sono il tipico esempio di percorso guidato con utilizzo di motore di regole gerarchico.

Nel caso di configuratori con motore di regole dichiarativo, invece, abbiamo un controllo immediato e continuo delle regole e dei vincoli. Le regole implementate per questo tipo di motore sono nella forma di dichiarazioni di ciò che è lecito e ciò che è proibito. Il fatto di avere una verifica continua, consente di dare maggior libertà all’utente dato che può decidere arbitrariamente a quale domanda rispondere senza il rischio di scegliere qualcosa di incoerente.

I pro e i contro dei due motori

Il motore di regole gerarchico è più semplice da implementare, la sua complessità dipende dalla numerosità di percorsi possibili. Il filo logico della configurazione è prestabilito e guidato, ma questo obbliga l’utente a ritornare sui propri passi (e quindi a step precedenti del wizard) in caso di ripensamento sulla selezione di una scelta. Tale variazione di scelta potrebbe avere un impatto sugli step successivi e sul percorso di configurazione, con la conseguente necessità di dover inserire nuovamente opzioni già selezionate in precedenza. 

Il motore di regole dichiarativo è più complesso, La scrittura delle regole viene fatta sulla base di cosa è possibile e cosa non è possibile, ma va fatta attenzione a non scrivere dichiarazioni che siano incongruenti e conflittuali. Inoltre c’è il rischio di lasciare qualche vincolo sottinteso e quindi, poiché le regole vengono elaborate e verificate ad ogni interazione con l’utente, di non avere il risultato finale voluto. Ma se correttamente impostato, l’utente può rispondere alle varie scelte selezionandole in modo arbitrario dato che non esiste un percorso fisso prestabilito. Nonostante questa arbitrarietà, la configurazione risulta sempre congruente con le regole che sono state impostate.

Conclusioni

Indipendentemente dalla logica e dal motore che si sceglie di utilizzare, è necessario un lavoro preliminare di analisi approfondita, in cui si mettono in relazione i valori possibili in risposta alle varie domande. Questo lavoro consente di andare ad impostare in modo corretto tutto il sistema. Personalmente ho una preferenza per i motori di regole di tipo dichiarativo: nonostante siano più complessi e per i quali non bisogna tralasciare nulla durante la compilazione delle regole, danno la possibilità di simulare un comportamento gerarchico (un motore gerarchico invece non consente il viceversa). Quindi sono più versatili e possono adattarsi con successo alle varie situazione che possono presentarsi.