Lógicamente, un modelo de descuento puede ser cualquier cosa , por lo que no puede suponer que puede programar todos los casos por adelantado. Tampoco nadie que responda su pregunta puede estar completamente seguro de lo que realmente necesita. Sin embargo, suponiendo que obtenga los tipos habituales de descuentos que se encuentran en el mundo real ...
Una gran pregunta es si los descuentos se programarán o si desea que los usuarios los ingresen. Como se mencionó anteriormente, nunca se puede programar, pero generalmente el objetivo es tratar de hacer que ingrese más datos como en casos comunes, en lugar de programarlos a todos. Esto se aplica en cierta medida, incluso si los programadores se utilizan para crear todos los descuentos.
Martin Fowler menciona "Método de instancia individual" en "Patrones de análisis: modelos de objetos reutilizables" como parte de cómo implementar "Reglas de contabilización" para sistemas de contabilidad, pero las reglas parecen bastante similares a las suyas. Daría más detalles pero es un trabajo protegido por derechos de autor y
Para una interfaz de usuario, debe encontrar casos de uso que sean bastante simples o crear un intérprete y un generador de consultas. Posiblemente ambos, uno para casos simples y otro más avanzado. Si escribe un intérprete, es probable que este sea un caso bastante bueno para usar el patrón Intérprete, ya que es relativamente simple de codificar en comparación con un generador de analizador, y el tiempo de análisis más lento probablemente no importará realmente. (Si te gusta el uso de generadores de analizadores sintácticos no dejar que te detenga).
No trate de hacer todo con un intérprete, aunque - en algún momento usted está programando en su propio idioma de mala muerte, por lo que también podría utilizar una de verdad. Si su lenguaje interpretado es compatible con funciones (que probablemente debería apoyar llamándolos - definirlos es dudosa) las que se pueden codificar en un lenguaje real. No ir más lejos por este camino que tiene que hacerlo.
No importa lo que hagas, eventualmente alguien va a querer que el descuento se basará en si ha comprado un plazo de 30 días hábiles de una promoción - donde cuentan días laborales solamente si no hay vacaciones en la región definida por cualquiera código postal de la tienda o las del cliente código postal. Así que no se trata de diseñar el sistema perfecto de antemano - asuma que ocasiones deberá escribir el código para los nuevos tipos de descuentos y diseño en consecuencia.