Cercando di risolvere la logica bogo coupon con un modello di progettazione corretto, ma riscontrando problemi nell'identificarne uno.
Caso d'uso: "Acquista iPad scarica SmartCase gratuitamente"
Supponiamo di avere i seguenti oggetti:
Product:
- getPrice
CartItem(Product p, quantity):
- getPrice
Cart:
- getItems()
- addItem(CartItem ci)
Coupon(code):
- getCode
CouponBuyOneGetOneFree(code) extends Coupon: (not sure about inheritance here)
1) Quale modello di progettazione si adatta qui?
2) E se avessi bisogno di impostare la stessa logica senza coupon ma nelle impostazioni del prodotto stesso?
Ho implementato Decorator pattern
per CartItem
quando lo sconto è applicato allo stesso CartItem
di questo esempio e funziona benissimo, ma non è ancora possibile ottenere il risultato di questo caso d'uso.
In qualche modo devo controllare che Ipad e SmartCase siano entrambi nel carrello e applicare lo sconto solo a SmartCase . Inoltre, se aggiungo un altro iPad dovrei ottenere un altro SmartCase gratuitamente.