Ho letto i principi SOLID la settimana scorsa e ho deciso di provare a risolvere il problema del mondo reale usandoli. Quindi ho ottenuto il problema dei totali di gestione del sito di e-commerce del mondo reale.
Dichiarazione del problema: Dobbiamo calcolare alcuni totali come subtotale, tasse, buoni, coupon, totale su un carrello prodotti.
Quindi ho deciso di fare TotalManager che restituisce total_data e total al resto del programma.
// total data variable looks like
array('key'=>value)
es. array('subtotal'=>100,'total'=>150,'tax'=>50)
class TotalManager{
private $total_data;
public function get_total_data()
{
$totals = array('subtotal','total','taxes')
// foreach totals array gets each object check its instance of interface itotal and called it's get method.
}
}
Interface Itotal
{
public function get_total_data();
public function get_total();
}
class subtotal implements Itotal
{
public function get_total_data()
{
// it needs cart object
// get the cart product calculate totals and return total_data and total
}
public function get_total()
{
return the subtotal in double/float
}
}
class total implements Itotal
{
public function get_total_data()
{
// get the other totals object and calls it get_total method
// calulate sum of all totals and return
}
public function get_total()
{
// calculate total and return back;
}
}
Ma sto affrontando problemi in questo modello:
Per il principio dell'inversione delle dipendenze non posso creare direttamente l'oggetto del carrello o del totale parziale in subtotale, classe Total, ma devo passarli dal controller al gestore totale.
Quando ci penso, ogni volta che aggiungo la classe, devo cambiare il gestore totale per aggiungere il nuovo metodo in modo da violare i principi di apertura / chiusura. Come risolvere questo in OOD?