Pregunta

necesito algunos consejos sobre el mejor enfoque para resolver este problema.

BABEANDO

He 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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top