Я читаю 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 />";
}
Но, согласно книге, я ошибаюсь (я тоже почти уверен). Вместо этого автор дал большую иерархию классов в качестве решения. В предыдущей главе автор указал следующие «четыре указателя» как время, когда мне следует подумать об изменении структуры моего класса:
- Дублирование кода
- Класс, который слишком много знал о его контексте
- Мастер на все руки - классы, которые пытаются делать много вещей
- Условные заявления
Единственная проблема, которую я вижу, - это условные утверждения, и это тоже расплывчато - так зачем же рефакторинг? Как вы думаете, какие проблемы могут возникнуть в будущем, чего я не предвидел?
Обновление : я забыл упомянуть - это структура класса, которую автор предоставил в качестве решения - шаблон стратегии :