Saya membaca Objek PHP, Pola, dan Praktek . Penulis sedang mencoba membuat model pelajaran di sebuah perguruan tinggi. Tujuannya adalah untuk menghasilkan jenis pelajaran (kuliah atau seminar), dan biaya untuk pelajaran tergantung pada apakah itu pelajaran harga per jam atau tetap. Jadi hasilnya seharusnya
Lesson charge 20. Charge type: hourly rate. Lesson type: seminar.
Lesson charge 30. Charge type: fixed rate. Lesson type: lecture.
ketika inputnya adalah sebagai berikut:
$lessons[] = new Lesson('hourly rate', 4, 'seminar');
$lessons[] = new Lesson('fixed rate', null, 'lecture');
Saya menulis ini:
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 />";
}
Tetapi menurut buku itu, saya salah (saya cukup yakin saya juga). Sebagai gantinya, penulis memberikan hierarki kelas yang besar sebagai solusinya. Dalam bab sebelumnya, penulis menyatakan 'empat rambu-rambu' sebagai waktu ketika saya harus mempertimbangkan untuk mengubah struktur kelas saya:
- Duplikasi kode
- Kelas yang tahu terlalu banyak tentang konteksnya
- The jack semua perdagangan - kelas yang mencoba untuk melakukan banyak hal
- Pernyataan bersyarat
Satu-satunya masalah yang bisa saya lihat adalah pernyataan kondisional, dan itu juga secara samar-samar - jadi mengapa refactor ini? Menurut Anda, masalah apa yang mungkin muncul di masa depan yang belum saya ramalkan?
Pembaruan : Saya lupa menyebutkan - ini adalah struktur kelas yang penulis berikan sebagai solusi - pola strategi :