Avantages et inconvénients des moteurs de règles Java [fermé]

108

Quels sont les avantages et les inconvénients de l'adoption des moteurs de règles Java JESS et Drools ? Y a-t-il d'autres joueurs?

Je comprends que Drools est Open Source et que JESS ne l'est pas, mais comment se comparent-ils dans d'autres domaines tels que la facilité d'utilisation, les performances, le niveau d'intégration avec votre code?

brabster
la source

Réponses:

128

Quels sont les avantages et les inconvénients de l'adoption des moteurs de règles Java JESS et Drools?

Utilisez un moteur de règles si vous devez séparer les règles métier de la logique d'application. L'article Votre projet a-t-il besoin d'un moteur de règles en donne un bon exemple:

Par exemple, un système de vitrine classique peut impliquer un code pour calculer une remise:

if (product.quantity > 100 && product.quantity < 500) {
  product.discount = 2;
} else if (product.quantity >= 500 && product.quantity < 2000) {
  product.discount = 5;
} else if (product.quantity >= 2000) {
  product.discount = 10;
}

Un moteur de règles remplace ce qui précède par un code qui ressemble à ceci:

ruleEngine.applyRules(product);

À vous de décider si mettre une console d'administration de règles entre les mains de personnes non techniques est une bonne chose ou non :)

Plus de détails dans Dois-je utiliser un moteur de règles? , Pourquoi utiliser un moteur de règles? , Quelques lignes directrices pour décider d'utiliser un moteur de règles et sur Google .

Y a-t-il d'autres joueurs?

Les autres joueurs incluent JRules, Corticon (JRules est l'OMI le plus célèbre - ce qui ne veut pas dire le meilleur).

comment se comparent-ils dans d'autres domaines comme la facilité d'utilisation, les performances, le niveau d'intégration avec votre code?

Je ne peux pas vous dire précisément, je n'ai qu'une petite expérience (positive) avec Drools. Mais vous obtiendrez des commentaires sur des articles de blog tels que JBoss Drools vs ILog JRules - une histoire anecdotique (assurez-vous de la lire) ou Working with Drools du point de vue de JRules . Je suis sûr que vous pouvez en trouver plus sur Google (mais je voudrais essayer Drools).

Pascal Thivent
la source
1
votre réponse semble bonne. Pourriez-vous s'il vous plaît me dire où utiliser de la bave et où Jess? En gros, je m'attends à une réponse plus liée diff. b / w bave et Jess.
Tony
7
Wow, @Pascal, cet exemple de quantité / remise de produit est un vrai WTF. Disons que la quantité est de 5 000. Le premier IF est évalué à vrai, les IF ELSE ne sont jamais évalués. Mettre ce type de logique métier dans un moteur de règles n'aidera en rien, bien que cela puisse rendre plus difficile la recherche du bogue.
DOK
Pour sa défense, cet exemple était tiré de ce premier article. Je ne sais pas trop à quel point celui-ci est crédible ... :)
Jeb
6
Juste un bon exemple des dangers de mettre le contrôle des règles entre des mains non techniques.
Pace
1
Pourquoi utiliser un moteur de règles? est le meilleur parmi les liens répertoriés
Aravind Yarram
16

Nous évaluons actuellement les règles à utiliser avec notre serveur d'applications. Nous avons rencontré OpenRules , qui est facile à intégrer à Java et, d'après nos tests, assez rapide. Le principal avantage d'OpenRules par rapport aux autres est la façon dont les règles sont modifiées et gérées. Tout se passe dans des tableaux Excel, ce qui est le moyen le plus simple pour les non-programmeurs. Toutes les personnes impliquées, même les personnes non techniques, ont tout compris parfaitement :-)

Nous avons également intégré des bave, mais les règles sont beaucoup plus compliquées à comprendre car il s'agit d'une approche plus programmatique. C'est pourquoi nous nous en tiendrons très probablement aux OpenRules.

Dominik Sandjaja
la source
19
Drools prend également en charge les règles éditées dans Excel et via une interface Web.
retronym
7

Nous avons eu une question similaire avec nous, nous avons finalement ramassé Drools, il faut utiliser des bave si vous avez les suivants:

  • Logique métier qui, selon vous, est encombrée de conditions multiples en raison de la variété des scénarios
  • Vous aurez une demande croissante d'augmentation de la complexité
  • Les changements de logique métier seraient fréquents (1 à 2 fois par an seraient également fréquents)
  • Votre serveur a suffisamment de mémoire car c'est un outil gourmand en mémoire, il offre des performances au détriment de la mémoire

Avoir plus de détails à l' URL suivante

Sachin Thapa
la source
3

Il suffit d'ajouter que de nombreuses personnes recherchent quelque chose de plus proche de la gestion du respect de certaines conditions pour activer ou désactiver certaines fonctionnalités dans une application.

J'étais fatigué de réimplémenter le même modèle partout où j'allais, alors j'ai décidé de créer un projet OSS pour celui-ci appelé Roolie http://sourceforge.net/projects/roolie/

Je viens de le personnaliser et comme aucun bogue n'a été signalé depuis 2010 lors de sa sortie, je l'ai mis à niveau vers la version 1.0 sans aucun changement autre que ceux requis pour l'héberger chez Maven Central (ce que je suis en train de faire ).

Fondamentalement, le JSR-94 est excessif pour la plupart des choses, et il y a une énorme courbe d'apprentissage et des frais généraux qui accompagnent les offres actuelles. C'est bien si c'est ce que vous voulez. Mais si vous souhaitez simplement enchaîner des règles simples écrites en Java avec XML pour maintenir vos tests d'état, Roolie est un moyen très rapide de le faire. Pas de dépendances et pas de courbe d'apprentissage.

RK
la source
2
Roolie déclare qu'il s'agit d'une licence MIT sur SourceForge, mais le code rapporte LGPLv3. Cela signifie essentiellement qu'il est douteux de l'utiliser dans un produit commercial (et dans certains produits Open Source également). Voir nmav.gnutls.org/2013/03/the-perils-of-lgplv3.html .
ingyhere
2

Lorsque nous avions besoin d'un moteur de règles, nous avons décidé de lancer le nôtre, car ceux disponibles étaient beaucoup trop compliqués pour nos tâches simples. Si vous êtes même expérimenté à distance avec l'analyse des expressions que les utilisateurs peuvent insérer, ce n'est pas très difficile à faire. Dans notre cas, la plupart des spécifications sont gérées par un XSD et seuls quelques champs sont analysés plus en détail.

Confusion
la source
6
Les moteurs de règles utilisent des algorithmes bien établis (tels que le chaînage avant et l'algorithme Rete) afin de passer à des problèmes non triviaux. Si vous évaluez simplement des expressions, une bibliothèque existante telle que MVEL peut être utile.
jevon