ฉันอ่าน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 />";
}
แต่ตามหนังสือฉันผิด (ฉันค่อนข้างมั่นใจว่าฉันก็เหมือนกัน) แต่ผู้เขียนให้ลำดับชั้นของชั้นเรียนขนาดใหญ่เป็นวิธีแก้ปัญหา ในบทก่อนหน้านี้ผู้เขียนระบุ 'สี่เสา' ต่อไปนี้เป็นเวลาที่ฉันควรพิจารณาเปลี่ยนโครงสร้างชั้นเรียนของฉัน:
- การทำสำเนารหัส
- คลาสที่รู้มากเกินไปเกี่ยวกับบริบทของมัน
- แจ็คของการค้าทั้งหมด - ชั้นเรียนที่พยายามที่จะทำหลายสิ่งหลายอย่าง
- คำสั่งแบบมีเงื่อนไข
ปัญหาเดียวที่ฉันเห็นคือข้อความที่มีเงื่อนไขและในลักษณะที่คลุมเครือ - เหตุใดจึงต้องมีการปรับปรุงใหม่ คุณคิดว่ามีปัญหาอะไรเกิดขึ้นในอนาคตที่ฉันไม่คาดคิด
อัปเดต : ฉันลืมที่จะพูดถึง - นี่คือโครงสร้างคลาสที่ผู้เขียนได้ให้ไว้เป็นวิธีแก้ปัญหา - รูปแบบกลยุทธ์ :