Pro e contro dei motori di regole Java [chiuso]


108

Quali sono i pro e i contro dell'adozione dei motori di regole Java JESS e Drools ? Ci sono altri giocatori?

Capisco che Drools sia Open Source e JESS no, ma come si confrontano in altre aree come facilità d'uso, prestazioni, livello di integrazione con il tuo codice?

Risposte:


128

Quali sono i pro e i contro dell'adozione dei motori di regole Java JESS e Drools?

Utilizzare un motore di regole se è necessario separare le regole aziendali dalla logica dell'applicazione. L'articolo Il tuo progetto ha bisogno di un motore di regole ha un buon esempio:

Ad esempio, un tipico sistema di vetrina potrebbe coinvolgere il codice per calcolare uno sconto:

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 motore di regole sostituisce quanto sopra con un codice simile a questo:

ruleEngine.applyRules(product);

Sta a te decidere se mettere una console di amministrazione delle regole nelle mani di persone non tecniche è una buona cosa o no :)

Maggiori dettagli in Dovrei usare un motore di regole? , Perché utilizzare un motore di regole? , Alcune linee guida per decidere se utilizzare un motore di regole e su Google .

Ci sono altri giocatori?

Altri giocatori includono JRules, Corticon (JRules è l'IMO più famoso, il che non significa il migliore).

come si confrontano in altre aree come facilità d'uso, prestazioni, livello di integrazione con il codice?

Non posso dirti con precisione, ho solo una piccola (positiva) esperienza con Drools. Ma riceverai un feedback da post di blog come JBoss Drools vs ILog JRules - una storia aneddotica (assicurati di leggerla) o Working with Drools da una prospettiva di JRules . Sono sicuro che puoi trovarne altri su Google (ma proverei Drools).


1
la tua risposta sembra buona. Potresti dirmi dove usare la bava e dove Jess? Fondamentalmente, mi aspetto la risposta diff più correlata. b / n sbavare e Jess.
Tony il

7
Wow, @Pascal, l'esempio di quantità / sconto del prodotto è un vero WTF. Supponiamo che la quantità sia 5.000. Il primo IF restituisce true, gli ELSE IF non vengono mai valutati. Mettere quel tipo di logica aziendale in un motore di regole non aiuterà nulla, anche se potrebbe rendere più difficile trovare il bug.
DOK

A sua difesa quell'esempio era tratto da quel primo articolo. Non sono così sicuro di quanto sia credibile quello che sembra più ... :)
Jeb

6
Solo un buon esempio dei pericoli di mettere il controllo delle regole in mani non tecniche.
Andatura

1
Perché utilizzare un motore di regole? è il migliore tra i link elencati
Aravind Yarram

16

Stiamo valutando le regole da utilizzare con il nostro server delle applicazioni. Ci siamo imbattuti in OpenRules , che è facile da integrare con Java e, per quanto dimostrato dai nostri test, abbastanza veloce. Il vantaggio principale di OpenRules rispetto agli altri è il modo in cui le regole vengono modificate e gestite. Tutto accade nelle tabelle di Excel, che è il modo più semplice per i non programmatori. Tutti i soggetti coinvolti, anche le persone non tecniche, hanno capito tutto perfettamente :-)

Abbiamo anche integrato sbavature, ma le regole sono molto più complicate da capire in quanto si tratta di un approccio più programmatico. Ecco perché, molto probabilmente, ci atterremo a OpenRules.


19
Drools supporta anche le regole modificate in Excel e tramite un'interfaccia web.
retronym

7

Abbiamo avuto una domanda simile con noi, finalmente abbiamo raccolto Drools, si dovrebbe usare sbavature se si ha quanto segue:

  • Logica aziendale che ritieni sia ingombra di molteplici condizioni if ​​a causa della varietà di scenari
  • Avrai una crescente domanda di aumento della complessità
  • I cambiamenti della logica di business sarebbero frequenti (sarebbero frequenti anche 1-2 volte l'anno)
  • Il tuo server ha abbastanza memoria in quanto è uno strumento affamato di memoria, fornisce prestazioni al costo della memoria

Ulteriori dettagli al seguente URL


3

Aggiungo solo che molte persone sono alla ricerca di qualcosa di più simile a gestire se determinate condizioni sono soddisfatte per abilitare o disabilitare determinate funzionalità in un'applicazione.

Mi sono stancato di reimplementare lo stesso modello più e più volte ovunque andassi, quindi ho deciso di creare un progetto OSS chiamato Roolie http://sourceforge.net/projects/roolie/

L'ho appena modificato e poiché non sono stati segnalati bug dal 2010 quando è stato rilasciato, l'ho aggiornato alla v 1.0 senza modifiche oltre a quelle necessarie per ospitarlo su Maven Central (cosa che sto facendo ).

Fondamentalmente JSR-94 è eccessivo per la maggior parte delle cose, e c'è un'enorme curva di apprendimento e overhead che vanno di pari passo con le offerte attuali. Va bene se è quello che vuoi. Ma se vuoi solo concatenare semplici regole scritte in Java insieme a XML per mantenere i tuoi test di stato, Roolie è un modo molto veloce per farlo. Nessuna dipendenza e nessuna curva di apprendimento.


2
Roolie afferma che è concesso in licenza al MIT su SourceForge, ma il codice riporta LGPLv3. Ciò significa essenzialmente che è dubbio utilizzarlo in qualsiasi prodotto commerciale (e anche in alcuni prodotti Open Source). Vedi nmav.gnutls.org/2013/03/the-perils-of-lgplv3.html .
ingyhere

2

Quando avevamo bisogno di un motore di regole, abbiamo deciso di lanciarne uno nostro, perché quelli disponibili erano troppo complicati per i nostri semplici compiti. Se hai anche remotamente esperienza con l'analisi delle espressioni che gli utenti possono inserire, non è molto difficile da fare. Nel nostro caso, la maggior parte delle specifiche è gestita da un XSD e solo pochi campi vengono ulteriormente analizzati.


6
I motori di regole utilizzano algoritmi consolidati (come il forward chaining e l'algoritmo di Rete) per scalare fino a problemi non banali. Se stai semplicemente valutando espressioni, una libreria esistente come MVEL potrebbe essere utile.
jevon
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.