PHP Objects, Patterns 및 Practice을 읽고 있습니다. 저자는 대학에서 수업을 모델링하려고합니다. 목표는 수업 유형 (강의 또는 세미나)과 시간당 또는 고정 가격 수업인지에 따라 수업 요금을 출력하는 것입니다. 따라서 출력은
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 />";
}
그러나 그 책에 따르면, 나는 틀렸다 (나도 확실하다). 대신 저자는 솔루션으로 큰 계층의 클래스를 제공했습니다. 이전 장에서 필자는 수업 구조 변경을 고려해야 할 시점으로 다음과 같은 '네 개의 푯말'을 언급했습니다.
내가 볼 수있는 유일한 문제는 조건문이며 모호한 방식입니다. 왜 리팩토링합니까? 내가 예상하지 못한 미래에 어떤 문제가 발생할 수 있다고 생각합니까?
업데이트 : 언급을 잊었습니다. 이것은 저자가 솔루션으로 제공 한 클래스 구조입니다- 전략 패턴 :