Necesito un motor de reglas simples, que pienso? [cerrado]
-
29-09-2019 - |
Pregunta
necesito algunos consejos sobre el mejor enfoque para resolver este problema.
BABEANDOHe investigado, Java motor de reglas y algunos otros. Todos ellos son poderosos, y tienen cosas buenas sobre ellos. No sé lo que (si lo hay) será la mejor opción para mí.
Tengo un objeto de negocio. (Simplificado para la demostración)
Person
firstName:String
lastName:String
departMent:String
hireDate:Date
Tengo que escribir un editor en una aplicación web que permitirá a reglas complejas para ser construido en torno a estos campos. Necesito para apoyar complejo anidada lógica Y / O. Sólo necesito operadores básicos, y el Estado simplemente debe evaluar a verdadero o falso. Si las reglas evalúa a verdadero o falso, una acción ocurrirá respectivamente.
Por ejemplo,
primerNombre contiene "valor" y (LastName es igual a "entrada" o departamento Contiene "entrada")
Yo había pensado, quizás debería escribir mi propio programa de análisis y evaluación de la lógica en mi propio código. No sé qué hacer, cualquier consejo o enlaces a algo que leer sería muy apreciada. ¿Hay un patrón de diseño específico que pudiera investigar?
¿Cómo resolver este problema? Uno reservas en cuanto a los motores de reglas es que tal vez son demasiado complejos para tan solo un problema?
Solución
Esta no es una pregunta sí / no, pero probablemente puede compartir mis experiencias, y espero que ayude. He utilizado BABEANDO con bastante éxito en algunos proyectos. Aparte de algunos casos (otro equipo tuvo problemas con BABEANDO bajo carga pesada,) BABEANDO es toda una biblioteca de utilidad.
I construyó una aplicación que:
1. Entrada de lectura de una fuente
2. eligió la siguiente acción en base a la entrada de un conjunto de operaciones disponibles
Tan trivial como parece, que tenía que ser muy flexible:
1. La entrada era un conjunto variable de pares nombre-valor, nombres no predeterminado.
2. Los valores, la presencia / ausencia de ciertos valores de nombre / (basado en la ocurrencia / ausencia de eventos), disparo diferentes acciones.
3. Las reglas de negocio pueden cambiar mientras se ejecuta la aplicación.
Tal vez hay mejores soluciones, pero para mejor o peor, que terminé usando BABEANDO. He desarrollado un BPEL en el que las decisiones son tomadas por el componente BABEANDO. El componente BABEANDO lee internamente la creación de reglas de una hoja de cálculo de Microsoft Excel decisión. Se reconstruye las reglas si hay un cambio en el archivo. Ahora los expertos de dominio cambian esta hoja de cálculo cuando sea necesario, y que no pasan por los despliegues dolorosas!
Si desea una interfaz de usuario sofisticada, BABEANDO Guvnor es una aplicación web disponible (con una rica interfaz de usuario,) lo que ayudaría a los expertos de dominio / la materia de reglas de generación y almacenarlos en una base de datos.
Otros consejos
Los Drools documentación habla de cuándo utilizar un motor de reglas. http: //downloads.jboss .com / babea / docs / 5.1.1.34858.FINAL / drools experto / html_single / index.html # d0e181
A partir de los documentos ...
La respuesta más corta a esto es "cuando no hay satisfactoria tradicional planteamiento de programación para resolver el problema. ". Dado que la respuesta corta, Se requiere un poco más de explicación. los razón por la cual no hay un "tradicional" enfoque es posiblemente una de las siguiente:
- El problema es demasiado para violín código tradicional.
El problema no puede ser compleja, pero no se puede ver de manera no frágil la construcción de una solución para ello.
- El problema está más allá de cualquier obvia solución algorítmica.
Es un problema complejo de resolver, no hay obvia tradicional soluciones, o básicamente el problema no se entiende completamente.
- La lógica cambia a menudo
La lógica misma incluso puede ser simple pero las reglas cambian con bastante frecuencia. En muchas organizaciones versiones de software son pocos y distantes entre sí y conectable reglas pueden ayudar a proporcionar la "agilidad" que se necesita y espera en una razonablemente de forma segura.
- Los expertos del dominio (o analistas de negocios) son fácilmente disponibles, pero son no técnico.
Los expertos del dominio a menudo poseen una gran riqueza de conocimiento acerca de las reglas de negocio y procesos. Por lo general son no técnico, pero puede ser muy lógico. Las reglas pueden permitirles expresar la la lógica en sus propios términos. Por supuesto, todavía tienen que pensar de forma crítica y ser capaz de pensamiento lógico. Muchas personas en posiciones no técnicas no tienen formación en lógica formal, así que tenga cuidado y el trabajo con ellos, como se mediante la codificación de conocimiento del negocio en reglas, que a menudo expone en agujeros la forma en que las reglas de negocio y procesos se entiende actualmente.
Cuando no usar ...
Como motores de reglas son dinámicos (dinámico en el sentido de que las reglas pueden ser almacenados y gestionados y actualizados como datos), que a menudo son vistos como una solución al problema de desplegar software. (Departamentos más lo parecen existir para el propósito de prevenir el software está desplegando.) Si esto es la razón por la que desean utilizar una regla motor, tenga en cuenta que los motores de reglas funcionan mejor cuando usted es capaz de escribir reglas declarativas. Como alternativa, se puede considerar diseños basados ??en datos (tablas de consulta), o el proceso del script motores, donde se gestionan los scripts en una base de datos y son capaces de estar actualizada sobre la marcha.
Yo sugeriría su propio analizador. En este contexto, ¿por qué no se puede serializar el objeto y el uso de AJAX para validarlo en la parte de atrás? A continuación, separa la lógica de validación de la interfaz de usuario.
Me gustaría echar un vistazo a algunas interfaces motor de reglas de muestra y ver qué más me gustan. Se puede ver en las interfaces basadas en web reglas de correo electrónico para obtener algunas ideas. Si realmente necesita un simple motor de reglas, sólo tiene que crear una interfaz bien, y entonces usted puede enviar las reglas al servidor con javascript.
Probablemente no. Es necesario un modelo de dominio decente. No es aquella donde el objetos son marcadores de posición de datos sólo. Son sus usuarios probable que sean capaces de entender y utilizar un sistema de reglas tan complejo, y serían los que no prefiero simplemente programación en Java, donde tienen encapsulación adecuada y el apoyo refactorización? sistemas de reglas sólo funcionan con reglas simples en un dominio restringido, donde se puede explicar por las personas no entrenadas como programadores cómo construirlos. Y no se olvide de las normas de construcción se acaba de programación, por lo que aún necesita el control de versiones, pruebas, y no quiere globales.
¿No Jython ser útil?
Cada / complejo en reglas expresión podría ser el cuerpo de una función. Por lo que el usuario proporciona el cuerpo, y sus códigos pone la función de especificaciones alrededor de ella, y luego ejecutarlo.
También se puede poner cualquier objeto Java / variables de su propio en el contexto jython para ser utilizado en el script cuerpo / función.
A continuación, han estandarizado una, extensible lengua de gran difusión a su alcance. Pero creo que el editor de Jython podría ser un desafío.
¿Usted ha intentado JBehave ?
JBehave es un marco para el desarrollo del comportamiento-Driven (BDD). BDD es una evolución del desarrollo basado en pruebas (TDD) y la aceptación de la prueba impulsada por el diseño, y está destinado a hacer que estas prácticas sean más accesibles e intuitivo para los recién llegados como para expertos. Cambia el vocabulario de ser prueba basada a basadas en el comportamiento, y se posiciona como una filosofía de diseño.