Sto creando da zero il sito web della mia agenzia, un ordine alimentare online e un servizio di consegna.
Sto cercando di migliorare al meglio il sistema di promozione: ogni ristorante ha le sue promozioni e alcune di esse hanno una certa priorità rispetto ad altre.
Ad esempio, se il cliente ordina tre pizze e per ogni pizza ordinata c'è una lattina gratuita il sito suggerirà una bottiglia grande invece di tre lattine piccole. Potrebbero esserci più tipi di promozioni:
- se il tuo ordine è superiore a una soglia, otterrai qualcosa gratuitamente (ad esempio se l'ordine è superiore a 20 $, ricevi una birra gratis);
- un determinato prodotto ha associato qualcosa gratuitamente, anche se ne ordini uno solo (ad esempio una birra gratis per ogni salsiccia e pizza ai peperoni);
- se ordini un prodotto generico appartenente a una categoria precisa, ottieni qualcosa gratuitamente (ad esempio, ogni pizza ordinata ti dà una birra gratis, indipendentemente dal tipo di pizza che ordini);
- se ordini più di un prodotto, ricevi qualcosa gratuitamente (ad esempio se ordini più di una pizza o più di un kebab, ricevi qualcosa gratuitamente).
Alcuni ristoranti offrono solo una delle quattro promozioni di cui sopra, o una combinazione di questi: alcuni di essi potrebbero confondersi tra loro.
Il vecchio sito web era un casino, una piramide di sventura di% nidificato% co_de e loro vogliono che sia reso più facile e facile da gestire (l'inserimento e la rimozione delle promozioni devono essere facili).
Sto cercando di ricordare quale università mi ha lasciato e ho pensato a Deterministic finite automata (DFA) : il la grammatica sarebbe la regola della precedenza nel considerare le promozioni, i segni dell'alfabeto sarebbero i piatti e i prodotti gratuiti, la lingua sarebbe l'insieme delle possibili promozioni. Ma:
- ogni ristorante dovrebbe avere il suo set di promozioni, ad esempio la sua grammatica, il suo DFA (potrebbe essere eccessivo per sviluppare un DFA per un insieme così limitato di prodotti gratuiti);
- il design della grammatica potrebbe essere difficile (alcune promozioni potrebbero confondersi con altre se un ristorante offre più tipi di promozioni, inoltre la precedenza di alcune promozioni rispetto ad altre potrebbe essere difficile da progettare con regole grammaticali e più facile da descrivere con un po 'di peso "concetto).
Quale sarebbe l'algoritmo / struttura dati più appropriato da utilizzare in questi casi?