web-dev-qa-db-fra.com

Moteur de règles léger en Javascript

Je recherche des suggestions pour un moteur de règles léger implémenté en Javascript.

La raison d'une telle implémentation est de construire une simulation basée sur navigateur très légère mais rapide en utilisant un petit ensemble de règles (moins de 20). La simulation prendrait une demi-douzaine de paramètres et exécuterait les règles et afficherait les résultats dans le navigateur sans avoir à retourner sur le serveur. Pensez à une interface utilisateur avec quelques boutons radio, cases à cocher, zones de texte et curseurs pour contrôler les paramètres. La simulation serait rapidement réexécutée en fonction de tout changement de paramètre.

48
Philippe Monnet

J'ai implémenté une version (plus compliquée) de ce que vous décrivez en c #, et en repensant au code, tout serait faisable avec JavaScript. Je suis d'accord avec les commentaires postés selon lesquels écrire le vôtre est une option viable. Cela 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):

  1. Les recherches non linéaires sont votre ami. En JavaScript, ce serait facile en utilisant le obj[key] = val syntaxe. Une fois que vous avez déterminé la sortie d'une règle pour un ensemble de paramètres donné, mettez ses résultats en cache afin de pouvoir les réutiliser sans réexécuter la règle.

  2. Déterminez si vous devez ou non traiter des combinaisons uniques d'entrées. Par exemple, disons que vous autorisez l'utilisateur à entrer plusieurs noms et demandez 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 hors de propos, 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).

  3. setTimeout () peut être utilisé pour lisser le comportement de l'interface utilisateur, mais les règles que vous décrivez doivent s'exécuter en quelques millisecondes ou moins, donc souciez-vous des performances en dernier. Les performances sont moins préoccupantes que vous ne le pensez avec un moteur de règles de base.

  4. Les définitions de règles seront plus faciles à manipuler s'il s'agit d'objets (ou même de simples arbres d'objets).

  5. Ne liez pas les éléments de l'interface utilisateur aux résultats de sortie; c'est-à-dire, 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.

  6. Les messages de sortie personnalisés sont très utiles pour un utilisateur. Autrement dit, 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 pointage de crédit n'est que de 550. Vous avez besoin d'un minimum de 600 pour continuer."

C'est tout en haut de ma tête. Bonne chance.

13
Tim Medora

Découvrez le moteur de règles nools implémenté en JavaScript pur pour node.js. Il a une syntaxe assez simple pour les définitions de règles.

13
dearwish

Rule Reactor ( https://github.com/anywhichway/rule-reactor ) est un moteur de règles métier léger, rapide et expressif de chaînage avant exploitant les composants internes JavaScript, les produits croisés paresseux et les fonctions en tant qu'objets plutôt que Rete. Il peut être utilisé dans le navigateur ou sur le serveur.

5
AnyWhichWay

Il s'agit d'un moteur de règles très simple, qui utilise le javascript côté serveur (moteur Rhino de Mozilla) (peut-être qu'il vous sera utile) http://jubyrajan.blogspot.com/2010/04/implementing-simple-deterministic- rule.html

2
John

J'ai créé un exemple de moteur de règles html/javascript pour un configurateur de produit. Le moteur de règles est basé sur les instructions if then. Les instructions if then seront vérifiées avec un tableau. Ce tableau est rempli de toutes les options possibles chaque fois qu'une option est modifiée. Consultez mon blog pour l'exemple. Lien vers mon blog "Moteur de règles javascript de chaînage avant"

Je pense que "obj [key] = val" est la clé d'un moteur de règles javascript. Jquery aide à la gestion javascript.

1
Alwin

Veuillez vérifier (JSL) https://www.npmjs.com/package/lib-jsl .

Dans le document de présentation, JSL est une bibliothèque de programmation logique basée sur JSON destinée à une utilisation intégrée dans les programmes JS. Il utilise JSON comme syntaxe ainsi que comme méthode d'E/S et fournit des rappels dans l'environnement hôte pour l'optimisation des performances.

1
Ruchir Walia