Я создаю класс, который реализует составной шаблон; Предполагается, что класс может представлять дерево (поэтому назовем его Tree).
Чтобы использовать как можно меньше памяти, когда экземпляру класса Tree передается массив, он сохраняется как массив до тех пор, пока не потребуется индекс; в это время новый дочерний экземпляр дерева создается и возвращается
Причина этого: экземпляры My Tree проходят через множество фильтров, и их наблюдатели могут просматривать и изменять их содержимое, но их содержимое будет запрошено только один раз (при окончательном рендеринге). Более того, определенный фрагмент может вообще не отображаться, поэтому будет потрачена впустую память на создание экземпляров Tree, которые даже не будут использоваться.
Другими словами, если использовать
$class->set($array,$index); //(or $class[$index] = $array)
, массив хранится как обычно. Но когда кто-то использует
$class->get($index) //(or $class[$index])
, будет возвращен новый экземпляр Tree (и кэширован для последующих вызовов).
Однако у меня осталась дилемма: я
- создать новый экземпляр дерева, когда кто-то устанавливает данные?
- Плюсы: код прост в написании, прост в обслуживании, прост в подборе и совершенствовании
- Минусы: потребление памяти, даже больше, если учесть, что часть введенных данных может не использоваться. Манипуляция становится более запутанной, поскольку для особых случаев должны быть написаны специальные методы (в отличие от работы с нативными массивами).
- оставить все как есть, но люди делают $ class [$ index] = array ($ index2 => $ array)?
- Плюсы: все хранится в виде массива, поэтому работают обычные функции массива и потребление памяти
минимален.
- минусов: использование менее "элегантно" и, возможно, более сложно.
Я знаю, что это не форум, поэтому я спрашиваю не мнения, а советы кого-то, кто уже разработал (потенциально тяжелую) древовидную структуру в PHP и как лучше (или "принятым способом") пойти на это.