Tôi đang đọc các đối tượng, mô hình và thực hành PHP . Tác giả đang cố gắng mô hình hóa một bài học trong một trường đại học. Mục tiêu là để xuất ra loại bài học (bài giảng hoặc hội thảo), và chi phí cho bài học tùy thuộc vào việc đó là một bài học giá hàng giờ hay giá cố định. Vì vậy, đầu ra nên được
Lesson charge 20. Charge type: hourly rate. Lesson type: seminar.
Lesson charge 30. Charge type: fixed rate. Lesson type: lecture.
khi đầu vào như sau:
$lessons[] = new Lesson('hourly rate', 4, 'seminar');
$lessons[] = new Lesson('fixed rate', null, 'lecture');
Tôi đã viết điều này:
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 />";
}
Nhưng theo cuốn sách, tôi đã sai (tôi khá chắc chắn rằng tôi cũng vậy). Thay vào đó, tác giả đã đưa ra một hệ thống phân cấp lớn của các lớp làm giải pháp. Trong một chương trước, tác giả đã tuyên bố "bốn biển chỉ dẫn" sau đây là thời điểm tôi nên xem xét thay đổi cấu trúc lớp học của mình:
- Sao chép mã
- Lớp người biết quá nhiều về bối cảnh của nó
- Các jack of all trades - lớp mà cố gắng làm nhiều điều
- Câu điều kiện
Vấn đề duy nhất tôi có thể thấy là các tuyên bố có điều kiện, và điều đó cũng theo một cách mơ hồ - vậy tại sao lại cấu trúc lại điều này? Những vấn đề nào bạn nghĩ có thể phát sinh trong tương lai mà tôi không lường trước được?
Cập nhật : Tôi quên đề cập - đây là cấu trúc lớp mà tác giả đã cung cấp dưới dạng giải pháp - mẫu chiến lược :