Sto leggendo Oggetti, modelli e pratica PHP . L'autore sta cercando di modellare una lezione in un college. L'obiettivo è quello di produrre il tipo di lezione (lezione o seminario) e gli addebiti per la lezione a seconda che si tratti di una lezione a prezzo fisso o orario. Quindi l'output dovrebbe essere
Lesson charge 20. Charge type: hourly rate. Lesson type: seminar.
Lesson charge 30. Charge type: fixed rate. Lesson type: lecture.
quando l'input è come segue:
$lessons[] = new Lesson('hourly rate', 4, 'seminar');
$lessons[] = new Lesson('fixed rate', null, 'lecture');
Ho scritto questo:
class Lesson {
private $chargeType;
private $duration;
private $lessonType;
public function __construct($chargeType, $duration, $lessonType) {
$this->chargeType = $chargeType;
$this->duration = $duration;
$this->lessonType = $lessonType;
}
public function getChargeType() {
return $this->getChargeType;
}
public function getLessonType() {
return $this->getLessonType;
}
public function cost() {
if($this->chargeType == 'fixed rate') {
return "30";
} else {
return $this->duration * 5;
}
}
}
$lessons[] = new Lesson('hourly rate', 4, 'seminar');
$lessons[] = new Lesson('fixed rate', null, 'lecture');
foreach($lessons as $lesson) {
print "Lesson charge {$lesson->cost()}.";
print " Charge type: {$lesson->getChargeType()}.";
print " Lesson type: {$lesson->getLessonType()}.";
print "<br />";
}
Ma secondo il libro, ho torto (sono sicuro che lo sia anch'io). Invece, l'autore ha dato una grande gerarchia di classi come soluzione. In un capitolo precedente, l'autore ha dichiarato i seguenti "quattro pannelli" come il tempo in cui dovrei considerare di cambiare la mia struttura di classe:
- Duplicazione del codice
- La classe che sapeva troppo del suo contesto
- Il jack di tutti i mestieri - classi che cercano di fare molte cose
- Dichiarazioni condizionali
L'unico problema che riesco a vedere sono le dichiarazioni condizionali, e anche quelle in modo vago - quindi perché refactarlo? Quali problemi pensate potrebbero sorgere in futuro che non avessi previsto?
Aggiornamento : ho dimenticato di menzionare - questa è la struttura della classe che l'autore ha fornito come soluzione - il modello di strategia :