一部のオブジェクトの状態を表すリストを作成する場合、各オブジェクトにその状態を要求してリストを自分で変更する必要がありますか、それともオブジェクトにリストを与えてそれ自体を追加するように指示する必要がありますか?
ページに出力するためのテンプレートのリストを作成しています。フォーム要素では、このリストをキーと値のペアにまとめる必要があります。同僚から「教えて、聞かないで」にもっと注意を払うべきだと言われ、この問題に関してその原則を理解しようとしています。
TemplateListのインスタンスを作成し、各テンプレートにそれ自体をリストに追加するように依頼するというアプローチを採用しました。これにより、テンプレートはどの引数に渡すかを決定できますTemplateList::addTemplate()
。
class TemplateList {
public $templates = array();
public function addTemplate($id, $label) {
$this->templates[$id] = $label;
}
public function getTemplates() {
return $templates;
}
}
interface TemplateInterface {
public function addToTemplateList(&$templatelist);
}
class DiskTemplate implements TemplateInterface {
public function addToTemplateList(&$template_list) {
$template_list->addTemplate($this->name, $this->name);
}
}
class DatabaseTemplate implements TemplateInterface {
public function addToTemplateList(&$template_list) {
$template_list->addTemplate($this->id, $this->name);
}
}
使用例:
$template_list = new TemplateList;
// fetch $disk_templates and $db_templates
foreach ($disk_templates as $template) {
$template->addToTemplateList($template_list);
}
foreach ($db_templates as $template) {
$template->addToTemplateList($template_list);
}
別のアプローチでは、テンプレートにその状態を尋ね、その結果をテンプレートリストに追加します。
$template_list = new TemplateList;
// fetch $template
$template_list->addTemplate($template->propertiesForTemplateList());
どちらのアプローチにも利点はありますか?私が完全に考慮していない他の何かがありますか?