ventajas strategy plantilla patrones patron metodo los historia estados ejemplos diseño desventajas comportamiento design-patterns rules

design-patterns - plantilla - patron strategy java ejemplos



Diseñar patrones y algoritmos para aplicar reglas a los hechos (2)

Hay un buen artículo de Martin Fowler en Rules Engine y dónde usarlos. Ver si ayuda

http://www.martinfowler.com/bliki/RulesEngine.html

Estoy en el medio de tratar de establecer los requisitos de un cliente para un motor de fijación de precios en un entorno minorista. Hemos definido el motor de fijación de precios como operando en un conjunto de reglas de fijación de precios que establecen nuevos puntos de precio para los artículos comprados basados ​​en los artículos existentes que ya están en el carrito de compras.

Una regla de precio simple podría ser OBTENER UNA CAMISA 40% DE DESCUENTO . Una regla más compleja podría ser OBTENER UNA CAMISA GRATUITA CUANDO COMPRE 2 PANTALONES Y GASTAR POR LO MENOS $ 30 .

La práctica general de la industria para aplicar estas reglas parece ser el mejor precio final para el cliente, pero ha surgido la necesidad de una opción de clasificación y apilamiento.

La clasificación permitirá una regla que de otro modo perdería para ganar. El apilamiento permitiría ganar múltiples reglas.

He revisado muchas de las publicaciones aquí en SO con respecto a los motores de reglas y necesito ayuda para determinar si debería mirar una de estas herramientas como parte de mi diseño o, si no, qué patrones de diseño y algoritmos podrían ser aplicables al diseño.

Está claro que esto es potencialmente un problema de NP, y la cantidad de ítems (hechos) con los que trataré podría exceder los 100+ por transacción, requiriendo repreciación cada vez que se agrega un nuevo ítem.


Un motor de reglas es muy adecuado. Si el motor de reglas es confiable, se adapta al resto de su arquitectura / aplicación y es necesario para una función principal de su aplicación, entonces, intente hacerlo.

Si el motor de reglas es solo una pequeña parte de su aplicación o incluso peor: es algún código, que no es el mismo lenguaje de programación que el resto de su aplicación ... entonces debería reconsiderarlo. Cada parte de la aplicación, que es externa desde su aplicación central (incluso la base de datos es externa a una aplicación Java) es un riesgo.

Entonces hay dos posibilidades: programar un motor de reglas simple por su cuenta o hacer uso de la estrategia o el patrón de estado.