2010-01-30 10 views
98

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

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?

risposta

13

Attualmente stiamo valutando le regole per l'utilizzo con il nostro server applicazioni. Ci siamo imbattuti in OpenRules, che è facile da integrare con Java e, per quanto i nostri test hanno dimostrato, abbastanza veloce. Il vantaggio principale di OpenRules rispetto agli altri è il modo in cui le regole vengono modificate e gestite. Succede tutto nelle tabelle di Excel, che è il modo più semplice per i non programmatori. Tutti, anche quelli non tecnici, hanno capito tutto alla perfezione :-)

Abbiamo anche gli sbagli integrati, ma le regole sono molto più complicate da comprendere in quanto è un approccio più programmatico. Questo è il motivo per cui, molto probabilmente, resteremo fedeli a OpenRules.

+14

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

118

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 Does Your Project Need a Rule Engine ha un buon esempio:

Ad esempio, un tipico sistema storefront potrebbe comportare 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 il precedente con codice simile questo:

ruleEngine.applyRules(product); 

Fino a voi d ecide se mettere una console regola di amministrazione nelle mani di persone non tecniche è una cosa buona o no :)

Maggiori dettagli in Should I use a Rules Engine?, Why use a Rule Engine?, Some Guidelines For Deciding Whether To Use A Rules Engine e Google.

Ci sono altri giocatori?

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

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

Non posso dirvi esattamente, ho solo una piccola (positiva) esperienza con Drools. Ma riceverai un feedback dai post del blog come JBoss Drools vs ILog JRules - an anecdotal story (assicurati di leggerlo) o Working with Drools from a JRules perspective. Sono sicuro che puoi trovarne altri su Google (ma darei una prova a Drools).

+0

la tua risposta sembra buona. Potresti dirmi dove usare drool e dove andare a Jess? Fondamentalmente, mi aspetto la risposta più correlata diff. b/w drool e Jess. – Tony

+7

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

+0

In sua difesa quell'esempio proveniva da quel primo articolo. Non è così sicuro di quanto sia credibile che si guardi più ... :) – Jeb

2

Quando avevamo bisogno di un motore di regole, abbiamo deciso di lanciare il nostro, perché quelli disponibili erano troppo complicati per le nostre semplici attività. Se sei anche solo lontanamente esperto di espressioni di parsing che gli utenti possono inserire, questo non è molto difficile da fare.Nel nostro caso, la maggior parte delle specifiche è gestita da un XSD e solo alcuni dei campi vengono analizzati ulteriormente.

+6

I motori di regole utilizzano algoritmi ben consolidati (come la concatenazione diretta e l'algoritmo di Rete) per scalare fino a problemi non banali. Se stai semplicemente valutando le espressioni, può essere utile una libreria esistente come MVEL. – jevon

3

Solo aggiungendo che molte persone stanno cercando qualcosa di più simile a gestire se sono soddisfatte determinate condizioni per abilitare o disabilitare determinate funzionalità in un'applicazione.

Sono cresciuto stanco di ri-attuazione lo stesso schema più e più ovunque sono andato, così ho deciso di fare un progetto OSS per esso chiamato Roolie http://sourceforge.net/projects/roolie/

Ho appena Maven-ized e dal momento che non ci sono stati i bug segnalati dal 2010 quando è stato rilasciato, l'ho aggiornato a v 1.0 senza modifiche diverse da quelle richieste per l'hosting su Maven Central (che sono in procinto di fare).

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 semplicemente stringere 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.

+1

Roolie afferma che è autorizzato dal 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 http://nmav.gnutls.org/2013/03/the-perils-of-lgplv3.html. – ingyhere

6

Abbiamo avuto domanda simile con noi, abbiamo finalmente raccolto Drools, si dovrebbe usare sbava se avete seguenti:

    logica
  • affari che si pensa è sempre ingombra di più, se le condizioni a causa della varietà di scenari
  • avrete crescente domanda di aumento della complessità
  • cambia la logica
  • il business sarebbe frequente (1 - 2 volte l'anno sarebbe anche frequente)
  • del tuo server di avere sufficiente memoria in quanto è uno strumento affamato di memoria , fornisce prestazioni a costo della memoria

avere maggiori dettagli al seguente URL