LINUX.ORG.RU

Склеить два шаблона: как?

 ,


0

1

Есть прототип некоей системы на PHP 5.2 + Dojo 1.8.

Там есть таблица в БД такой структуры, что браузится пользователем в прикладном ПО как некое дерево.

Для удобства работы написан класс, архитектурная модель которого может быть названа паттерном.

Некоторые листы этого дерева (те, у которых указан тип из определённого списка) связаны через свое значение с другой таблицей БД, но во второй — структура проще: набор полей, некоторые из которых могут быть пустыми.

Хочется, чтобы данные второй таблицы можно было сделать частью существующего дерева, т.е. открывать как узлы и браузить контент как единое целое, без особых ухищрений. Хочется, чтобы такой лист стал узлом, у которого дети — непустые поля во второй таблице. Не хочется писать обёртку, а просто влить второй паттерн в первый с минимумом изменений. Тем более, что первый паттерн в связке с первой таблицей БД уже доказал свою работоспособность.

Внутри первого паттерна элементы дерева связаны друг с другом по целочисленным ID. Может, генерировать ID для второй таблицы из такого диапазона, чтобы он просто не пересекался с ID из первого диапазона? Но могут пересечься ID с первой таблицей, поэтому не получится слить «в лоб».

И есть ли варианты умного клея: как склеить паттерны так, чтобы не переделывать первый паттерн, например, поискать швы?

★★★★★

Разве тут потребуются большие изменения, если делать «в лоб»?

В твоём классе есть метод получения потомков отдельный ноды, так? Просто добавь туда нечто такое

if (node.isLeaf() && (typeof node === SomeType)) {
  // возвращаем записи из второй базы
} else {
  // стандартная логика
}

Разумеется, записи из второй бд надо будет кое-как обёрнуть, но это явно быстрее, чем «склеивать паттерны».

Apple-ch ★★ ()
26 ноября 2013 г.
Ответ на: комментарий от Apple-ch

Спасибо за ответ :-). Долго думал как бы получше сделать. К слову, дерево реализовано через обычный табличный грид. В результате, похоже, устоявшимся решением стало добавление в окно второго грида, но между ними есть логическая связь: когда открываешь нужный лист в первом гриде, во втором — все которые имеют отношение к открытому листу первого и к его детям. И да, между делом перешёл на Dojo 1.9. :-)

Infra_HDC ★★★★★ ()
Последнее исправление: Infra_HDC (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.