Logicamente, un modello di sconto può essere qualsiasi cosa , quindi non puoi presumere che tu possa programmare tutti i casi in anticipo. Né chiunque può rispondere alla tua domanda essere completamente sicuro di ciò di cui hai effettivamente bisogno. Tuttavia, assumendo che si ottengano i soliti tipi di sconti trovati nel mondo reale ...
Una grande domanda è se gli sconti saranno programmati o se vuoi che gli utenti li inseriscano. Come accennato in precedenza, non è possibile mai averli programmati, ma di solito l'obiettivo è cercare di renderlo più un inserimento di dati simile a casi comuni, piuttosto che programmarli tutti. Questo si applica in parte anche se i programmatori sono utilizzati per creare tutti gli sconti.
Martin Fowler menziona "Metodo di istanza individuale" in "Modelli di analisi: modelli di oggetti riutilizzabili" come parte di come implementare "Regole di registrazione" per i sistemi di contabilità, ma le regole sembrano abbastanza simili alla tua. Darei maggiori dettagli ma è un lavoro protetto da copyright e
Per un'interfaccia utente, devi creare casi d'uso abbastanza semplici oppure creare un interprete e un generatore di query. Forse entrambi, uno per casi semplici e uno più avanzato. Se si scrive un interprete, questo è probabilmente un buon caso per l'utilizzo del pattern Interpreter, dal momento che è relativamente semplice da codificare rispetto a un generatore di parser, e il tempo di analisi più lento probabilmente non avrà molta importanza. (Se ti piace usare i parser generatori non lasciarmi fermare).
Non provare comunque a fare tutto con un interprete - ad un certo punto stai programmando nel tuo linguaggio scadente, quindi potresti anche usare uno vero. Se il tuo linguaggio interpretato supporta le funzioni (probabilmente dovrebbe supportare chiamarle - definirle è dubbio) quelle possono essere codificate in un linguaggio reale. Non andare più avanti su questa strada di quello che devi.
Indipendentemente da ciò che fai, alla fine qualcuno vorrà che lo sconto sia basato sul fatto che siano stati acquistati entro 30 giorni lavorativi da una promozione - dove i giorni lavorativi contano solo se non ci sono festività nella regione definite dal codice postale del negozio o il codice postale del cliente. Quindi non cercare di progettare in anticipo il sistema perfetto - supponi che a volte dovrai scrivere codice per nuovi tipi di sconti e progettare di conseguenza.