Estou lendo objetos, padrões e práticas do PHP . O autor está tentando modelar uma lição em uma faculdade. O objetivo é produzir o tipo de aula (palestra ou seminário) e os encargos da aula, dependendo se é uma aula de preço fixo ou por hora. Portanto, a saída deve ser
Lesson charge 20. Charge type: hourly rate. Lesson type: seminar.
Lesson charge 30. Charge type: fixed rate. Lesson type: lecture.
quando a entrada é a seguinte:
$lessons[] = new Lesson('hourly rate', 4, 'seminar');
$lessons[] = new Lesson('fixed rate', null, 'lecture');
Eu escrevi isto:
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 />";
}
Mas, de acordo com o livro, estou errado (também tenho certeza). Em vez disso, o autor forneceu uma grande hierarquia de classes como solução. Em um capítulo anterior, o autor declarou os seguintes 'quatro sinais' como o momento em que eu deveria considerar alterar minha estrutura de classe:
- Duplicação de código
- A turma que sabia demais sobre seu contexto
- O valete de todos os negócios - classes que tentam fazer muitas coisas
- Instruções condicionais
O único problema que vejo são as declarações condicionais e isso também de uma maneira vaga - então, por que refatorar isso? Que problemas você acha que podem surgir no futuro que eu não previ?
Atualização : esqueci de mencionar - esta é a estrutura de classes que o autor forneceu como solução - o padrão de estratégia :