Pros y contras de los motores de reglas de Java [cerrado]

108

¿Cuáles son los pros y los contras de adoptar los motores de reglas Java JESS y Drools ? ¿Hay otros jugadores?

Entiendo que Drools es de código abierto y JESS no, pero ¿cómo se comparan en otras áreas como facilidad de uso, rendimiento, nivel de integración con su código?

brabster
fuente

Respuestas:

128

¿Cuáles son los pros y los contras de adoptar los motores de reglas Java JESS y Drools?

Utilice un motor de reglas si necesita separar las reglas comerciales de la lógica de la aplicación. El artículo ¿Necesita su proyecto un motor de reglas? Tiene un buen ejemplo:

Por ejemplo, un sistema de escaparate típico puede incluir un código para calcular un descuento:

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 motor de reglas reemplaza lo anterior con un código que se ve así:

ruleEngine.applyRules(product);

Depende de usted decidir si poner una consola de administración de reglas en manos de personas sin conocimientos técnicos es algo bueno o no :)

Más detalles en ¿Debería usar un motor de reglas? , ¿Por qué utilizar un motor de reglas? , Algunas pautas para decidir si usar un motor de reglas y en Google .

¿Hay otros jugadores?

Otros jugadores incluyen JRules, Corticon (JRules es el IMO más famoso, lo que no significa el mejor).

¿Cómo se comparan en otras áreas como facilidad de uso, rendimiento, nivel de integración con su código?

No puedo decirte con precisión, solo tengo una pequeña experiencia (positiva) con Drools. Pero obtendrá algunos comentarios de publicaciones de blogs como JBoss Drools vs ILog JRules: una historia anecdótica (asegúrese de leerla) o Trabajar con Drools desde la perspectiva de JRules . Estoy seguro de que puedes encontrar más de ellos en Google (pero le daría una oportunidad a Drools).

Pascal Thivent
fuente
1
tu respuesta se ve bien. ¿Podrías decirme dónde usar la baba y dónde ir a Jess? Básicamente, espero una respuesta más relacionada con la diferencia. b / n babeo y Jess.
Tony
7
Vaya, @Pascal, ese ejemplo de cantidad / descuento de producto es un WTF real. Digamos que la cantidad es 5,000. El primer IF se evalúa como verdadero, los ELSE IF nunca se evalúan. Poner ese tipo de lógica empresarial en un motor de reglas no ayudará en nada, aunque podría dificultar la búsqueda del error.
DOK
En su defensa, ese ejemplo fue del primer artículo. No estoy tan seguro de cuán creíble se ve eso ... :)
Jeb
6
Solo un buen ejemplo de los peligros de poner el control de las reglas en manos no técnicas.
Ritmo
1
¿Por qué utilizar un motor de reglas? es el mejor entre los enlaces enumerados
Aravind Yarram
16

Estamos evaluando reglas ahora para su uso con nuestro servidor de aplicaciones. Nos hemos encontrado con OpenRules , que es fácil de integrar con Java y, según han demostrado nuestras pruebas, lo suficientemente rápido. La principal ventaja de OpenRules sobre las demás es la forma en que se modifican y manejan las reglas. Todo sucede en tablas de Excel, que es la forma más sencilla para los no programadores. Todos los involucrados, incluso las personas no técnicas, entendieron todo perfectamente :-)

También tenemos babas integradas, pero las reglas son mucho más complicadas de entender ya que es un enfoque más programático. Es por eso que, muy probablemente, nos ceñiremos a OpenRules.

Dominik Sandjaja
fuente
19
Drools también admite reglas editadas en Excel y mediante una interfaz web.
retrónimo
7

Tuvimos una pregunta similar con nosotros, finalmente recogimos Drools, uno debe usar babeo si tiene lo siguiente:

  • Lógica empresarial que cree que se está llenando de múltiples condiciones if debido a la variedad de escenarios
  • Tendrá una demanda creciente de aumento en la complejidad.
  • Los cambios en la lógica empresarial serían frecuentes (1 o 2 veces al año también serían frecuentes)
  • Su servidor tiene suficiente memoria, ya que es una herramienta que consume mucha memoria, proporciona rendimiento a costa de memoria

Tenga más detalles en la siguiente URL

Sachin Thapa
fuente
3

Solo agrego que muchas personas buscan algo más parecido a administrar si se cumplen ciertas condiciones para habilitar o deshabilitar ciertas funciones en una aplicación.

Me cansé de volver a implementar el mismo patrón una y otra vez en todos los lugares a los que iba, así que decidí hacer un proyecto de OSS para él llamado Roolie http://sourceforge.net/projects/roolie/

Lo acabo de mejorar y, dado que no se han informado errores desde 2010 cuando se lanzó, lo actualicé a la versión 1.0 sin cambios más que los necesarios para alojarlo en Maven Central (que estoy en proceso de hacer ).

Básicamente, JSR-94 es excesivo para la mayoría de las cosas, y hay una gran curva de aprendizaje y gastos generales que van de la mano con las ofertas actuales. Está bien si eso es lo que quieres. Pero si solo desea encadenar reglas simples escritas en Java junto con XML para mantener sus pruebas de estado, Roolie es una forma muy rápida de hacerlo. Sin dependencias y sin curva de aprendizaje.

RK
fuente
2
Roolie afirma que tiene licencia del MIT en SourceForge, pero el código informa LGPLv3. Esto esencialmente significa que es dudoso usarlo en cualquier producto comercial (y también en algunos productos de código abierto). Consulte nmav.gnutls.org/2013/03/the-perils-of-lgplv3.html .
ingyhere
2

Cuando necesitábamos un motor de reglas, decidimos lanzar el nuestro, porque los disponibles eran demasiado complicados para nuestras tareas simples. Si tiene experiencia incluso remotamente con el análisis de expresiones que los usuarios pueden introducir, esto no es muy difícil de hacer. En nuestro caso, la mayor parte de las especificaciones son manejadas por un XSD y solo algunos de los campos se analizan más.

Confusión
fuente
6
Los motores de reglas utilizan algoritmos bien establecidos (como el encadenamiento directo y el algoritmo Rete) para escalar a problemas no triviales. Si simplemente está evaluando expresiones, una biblioteca existente como MVEL puede ser útil.
jevon