Ich lese PHP-Objekte, Muster und Übungen . Der Autor versucht, eine Lektion in einem College zu modellieren. Ziel ist es, den Unterrichtstyp (Vorlesung oder Seminar) und die Gebühren für den Unterricht auszugeben, je nachdem, ob es sich um einen Stunden- oder einen Festpreisunterricht handelt. So sollte die Ausgabe sein
Lesson charge 20. Charge type: hourly rate. Lesson type: seminar.
Lesson charge 30. Charge type: fixed rate. Lesson type: lecture.
wenn die Eingabe wie folgt ist:
$lessons[] = new Lesson('hourly rate', 4, 'seminar');
$lessons[] = new Lesson('fixed rate', null, 'lecture');
Ich habe das geschrieben:
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 />";
}
Aber laut dem Buch irre ich mich (ich bin mir ziemlich sicher, dass ich es auch bin). Stattdessen gab der Autor eine große Hierarchie von Klassen als Lösung an. In einem früheren Kapitel hat der Autor die folgenden "vier Wegweiser" als den Zeitpunkt angegeben, zu dem ich eine Änderung meiner Klassenstruktur in Betracht ziehen sollte:
- Codeduplizierung
- Die Klasse, die zu viel über ihren Kontext wusste
- Der Alleskönner - Klassen, die versuchen, viele Dinge zu tun
- Bedingte Anweisungen
Das einzige Problem, das ich sehen kann, sind bedingte Aussagen, und das auch auf vage Weise - warum also umgestalten? Welche Probleme könnten Ihrer Meinung nach in Zukunft auftreten, die ich nicht vorausgesehen habe?
Update : Ich habe vergessen zu erwähnen - dies ist die Klassenstruktur, die der Autor als Lösung bereitgestellt hat - das Strategiemuster :