Qualcuno potrebbe dirmi se il seguente è A) una buona soluzione al problema della ripetizione del codice e B) un esempio del metodo del modello?
Diciamo che ho un tavolo, chiamato VEHICLES, che uso per memorizzare diversi tipi di veicoli (ad esempio, auto, furgoni, autobus). Ho un sacco di classi di repository che dovrebbero recuperare ogni tipo di veicolo:
class CarRepository{
public function getAll(){
$sql = "select * from vehicles where type='car'";
//some code to communicate with the database
}
}
class BusRepository{
public function getAll(){
$sql = "select * from vehicles where type='bus'";
//some code to communicate with the database
}
}
Come puoi vedere, ciascun repository ha quasi lo stesso codice nel metodo getAll, che non è molto SECCO. Stavo pensando che una soluzione migliore potrebbe essere quella di avere una classe base comune per i repository, in questo modo:
abstract class VehicleRepository{
final public function getAll(){
$sql = "select * from vehicles where type='".$this->getType()."'";
echo $sql;
//code to communicate with the database
}
abstract function getType();
}
E quindi ogni repository dovrebbe solo definire il metodo getType:
class CarRepository extends VehicleRepository{
public function getType(){
return "car";
}
}
class BusRepository extends VehicleRepository{
public function getType(){
return "bus";
}
}
Questo sembra ragionevole? E questo è ciò che si intende con il modello di metodo del modello?