PDA

View Full Version : Esercizietto di progettazione


dierre
30-11-2011, 20:59
Stavo a farmi un pò di roba in Ruby per riprenderci la mano.

Io ho una tabella prodotti del tipo

001 Mela 10 euro
002 Pera 14 euro
003 Kiwi 20 euro

Quando voglio fare checkout della roba che ho scelto all'interno di un ipotetico carrello, devo poter applicare delle policy promozionali. Esempio: se spendo più di 60 euro applico il 10% di sconto, se compro due oggetti di tipo X allora li pago Y invece di Z. (queste sono le due casistiche fornite)

In generale il checkout funzionerebbe con questa interfaccia (è obbligatorio che sia così, non c'è ordine specifico nel modo in cui gli oggetti vanno inseriti).


co = Paga.new(regole_promozionali)
co.add(ogg)
co.add(ogg)
co.total


Come fareste voi?

Io ho pensato, diciamo anche per user-experience diretta, che è il caso di farsi una tabella di output, per esempio con un contatore di oggetti dello stesso tipo. Ad ogni aggiunta di oggetto devo applicare la regola promozionale tanto sicuramente un cliente vorrà la roba aggiornata per ogni aggiunta (tipo il totale) con le promozioni applicate.

Il punto è proprio questo: come progettare le promozioni il più parametrizzabili possibili? Io pensavo a IdProdotto (con wildcard se è una promozione da applicare al totale), TipoPromozione (% o prezzo modificato), Soglia (può essere prezzo o quantità) ed infine il valore della modifica da applicare (10% o prezzo modificato).

Chiaramente poi va implementata la business logic per le casistica. Io la farei dentro l'add ed applicherei solo le casistiche per l'IdProdotto ed il totale.

Che dite?