Я читаю об'єкти, шаблони та практику PHP . Автор намагається моделювати урок у коледжі. Мета - вивести тип уроку (лекція чи семінар), а також оплата за урок залежно від того, чи це уроки щогодини або з фіксованою ціною. Тож вихід повинен бути
Lesson charge 20. Charge type: hourly rate. Lesson type: seminar.
Lesson charge 30. Charge type: fixed rate. Lesson type: lecture.
коли вхід такий:
$lessons[] = new Lesson('hourly rate', 4, 'seminar');
$lessons[] = new Lesson('fixed rate', null, 'lecture');
Я написав це:
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 />";
}
Але згідно з книгою, я помиляюся (я майже впевнений, що і я). Натомість автор подав велику ієрархію класів як рішення. У попередній главі автор вказав такі "чотири покажчики" як час, коли я повинен розглянути можливість зміни своєї класової структури:
- Копіювання коду
- Клас, який занадто багато знав про його контекст
- Домкрат всіх професій - класи , які намагаються зробити багато речей ,
- Умовні твердження
Єдина проблема, яку я можу бачити, - це умовні твердження, і це теж у невизначеному вигляді - то чому це рефактор? Які проблеми, на вашу думку, можуть виникнути в майбутньому, які я не передбачив?
Оновлення : я забув згадати - це структура класу, яку автор запропонував як рішення - шаблон стратегії :
