Код на PHP.
class Category {
public function getChilds(); // найти дочерние узлы
}
Вариант 1.
Ленивая загрузка в private свойство $childs.
Недостаток - при изменении потомков узла нужен механизм обновления $childs.
Причем этот механизм придется каждый раз писать руками, т.е. каждый раз заново делать в контексте объекта
$this->childs = null;
$this->childs = $this->getChilds() ;
в соответствующих методах, что очень не хочется.
Вариант 2.
Не делать lazy load, тогда во View я не могу делать что-то типа
<?php if ($category->getChilds() && $category->getChilds()->count()): ?>
<div>
<? foreach($category->getChilds() as $child): ?>
<?=$child->name?>
<? endforeach; ?>
</div>
<?php endif; ?>
- ибо будет каждый раз запрос к СУБД.
М.б. есть какие-то шаблоны проектирования по этому поводу, какие-то мысли?
Если кто разрабатывал подобные костыли, как вы писали?