J'ai implémenté une version (plus compliquée) de ce que vous décrivez en C#, et en repensant au code, tout cela serait faisable avec JavaScript. Je suis d'accord avec les commentaires postés selon lesquels écrire son propre code est une option viable. Il peut être aussi simple ou complexe que vous le souhaitez.
Observations générales pour ce type de moteur de règles (sans ordre particulier) :
-
Les recherches non linéaires sont vos amies. En JavaScript, cela serait facile en utilisant la fonction obj[key] = val
syntaxe. Une fois que vous avez déterminé la sortie d'une règle pour un ensemble donné de paramètres, mettez ses résultats en cache afin de pouvoir les réutiliser sans avoir à exécuter à nouveau la règle.
-
Déterminez si vous devez ou non traiter des combinaisons uniques d'entrées. Par exemple, supposons que vous autorisiez l'utilisateur à saisir plusieurs noms et à demander des suggestions sur XYZ. En réalité, vous devez maintenant exécuter toutes les règles par rapport à chaque valeur d'entrée. Cela peut être sans intérêt, simple ou extrêmement compliqué (imaginez un système de réservation d'hôtel qui prend plusieurs dates, heures, lieux et critères, et fait des suggestions).
-
setTimeout() peut être utilisé pour adoucir le comportement de l'interface utilisateur, mais les règles que vous décrivez devraient s'exécuter en quelques millisecondes ou moins, alors ne vous préoccupez que des performances. Les performances sont moins préoccupantes que vous ne le pensez avec un moteur de règles de base.
-
Les définitions de règles seront plus faciles à manipuler si elles sont des objets (ou même de simples arbres d'objets).
-
Ne liez pas les éléments de l'interface utilisateur aux résultats de sortie ; autrement dit, placez les résultats de l'exécution de la règle dans une liste d'objets flexible afin de pouvoir créer la sortie visuelle que vous souhaitez.
-
Les messages de sortie personnalisés sont très utiles pour l'utilisateur. Ainsi, plutôt que de déclencher un message générique lorsqu'une condition est remplie, essayez d'insérer une valeur réelle dans le message de sortie, par exemple : "Votre score de crédit n'est que de 550. Vous avez besoin d'un minimum de 600 pour continuer."
C'est tout ce qui me vient à l'esprit. Bonne chance.