Logicamente, un modello di sconto può essere qualsiasi cosa , quindi non puoi presumere che puoi programmare tutti i casi in anticipo. Né chiunque può rispondere alla tua domanda può essere completamente sicuro di ciò di cui hai effettivamente bisogno. Tuttavia, supponendo che tu ottenga i soliti tipi di sconti trovati nel mondo reale ...
Una grande domanda è se gli sconti saranno programmati o se si desidera che gli utenti li inseriscano. Come accennato in precedenza, non è mai possibile programmarli, ma di solito l'obiettivo è quello di provare a renderlo più immissione di dati come per i casi comuni, piuttosto che programmarli tutti. Ciò si applica in una certa misura anche se i programmatori vengono 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 le "Regole di registrazione" per i sistemi contabili, ma le regole sembrano abbastanza simili alle tue. Darei maggiori dettagli ma è un'opera protetta da copyright e
Per un'interfaccia utente, è necessario elaborare 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 scrivi un interprete, questo è probabilmente un buon caso per usare il modello Interprete, poiché è relativamente semplice da programmare rispetto a un generatore di parser, e il tempo di analisi più lento probabilmente non importerà davvero. (Se ti piace usare i generatori di parser non lasciarmi fermare).
Tuttavia, non provare a fare tutto con un interprete - a un certo punto stai solo programmando nel tuo linguaggio scadente, quindi potresti anche usarne uno vero. Se il tuo linguaggio interpretato supporta funzioni (probabilmente dovrebbe supportare chiamarle - definirle è dubbio) quelle possono essere codificate in un linguaggio reale. Non andare più avanti di questa strada di quanto tu debba fare.
Indipendentemente da ciò che fai, alla fine qualcuno vorrà che lo sconto si basi sul fatto che abbia acquistato entro 30 giorni lavorativi da una promozione - dove i giorni lavorativi contano solo se non ci sono vacanze nella regione definite dal codice postale del negozio o dal cliente codice postale. Quindi non provare a progettare il sistema perfetto in anticipo - supponi che a volte dovrai scrivere codice per nuovi tipi di sconti e progettare di conseguenza.