Тема: Организация дерева меню

В главе С.А.Зуева увидел реализацию дерева в виде системы вложенных файлов и у меня появилось несколько вопросов...
Уважаемый Сергей Александрович:
1. Почему после рассмотрения многих вариантов был выбран вариант с несколькими тысячами разных файлов?
1.а Чем был плох вариант с деревом в виде папок файловой системы?
2. Функция выборки дерева из таких файлов кажется мне довольно сложной (может быть только мне).
3. Работая с базами я научился очень просто вытаскивать любое дерево из базы, с любым набором атрибутов, в том числе картинок и прочего... Наверняка такой вариант рассматривался но почему то был отвергнут (это тем более непонятно - ведь ваша система все равно построена с использованием скул сервера)
4. Если все-таки принять скул серверный вариант дерева, то имеет ли смысл создавать трехзвенку для того что бы не гонять одни и теже данные по сети. Ведь объем передаваемых данных не большой для дерева, даже с учетом картинок.
5. Если принять файл-серверную базу находящуюся на локальном компе то по идее вообще никаких проблем быть недолжно.

Re: Организация дерева меню

Отделим мух от котлет.
Имеются несколько "деревьев"
1. Иллюстрированные меню программ. Реализованы на XML.
Может быть и один XML, могут быть много. Один большой дольше загружается. Маленькие могут быть вложены один в другой и в памяти образуют одно дерево. Разбивка на маленькие предусмотрена для удобства разборок (свои меню по темам) и для использования одних и тех же пунктов в разных разделах. Например, рисование отметок нужно всем, описаны они в одном маленьком XML, а отображаются у всех специальностей.
Таких файлов не несколько тысяч, а пока 180.
2. Иллюстрированные опции к разным программам. Принцип то же, только выбирается не программа, а данные. Количество - по программам, хотя один и тот же справочник могут использовать разные программы. Например из справочника труб кто-то использует только обозначение, а кто-то и технические характеристики.
3. Классификатор слоев. Здесь использовали много разных вариантов. В книге рассмотрен вариант с описанием свойств слоя в отдельном файле, размещенном в файловой системе. Но рядовой пользователь об этом и не знает. Он видит такое же дерево. Это дерево можно экспортировать в XML или в БД.
Вариант с файловой системой принят на период формирования номенклатуры слоев. Если, например, создан набор слоев для одного этажа, то достаточно просто скопировать каталог в дуругие этажи, а не вводить копированием в файлах.
Потом, после того, как номенклатура устаканится, можно переходить на клиент-серверную технологию.

Работая с базами я научился очень просто вытаскивать любое дерево из базы, с любым набором атрибутов, в том числе картинок и прочего... Наверняка такой вариант рассматривался но почему то был отвергнут

Нет никаких проблем с деревом в базе. Сайт www.kurganobl.ru/cad/  весь находится в БД и администрирование ведется из специальной программы, отображающей его в виде дерева. Хотя можно и прямо из браузера.
Но текстовыми XML-файлами гораздо удобнее манипулировать и редактировать их. Рассматривайте их как Базу Данных. БД могут быть и текстовые. Сейчас развиваются XML-базы.
Кроме того, реляционные базы в таблицах предполагают неизменную и единую структуру для всех записей. В XML мы можем использовать произвольную структуру для каждого объекта.

Функция выборки дерева из таких файлов кажется мне довольно сложной

Сложного там ничего нет. Простой анализ вложенных узлов. Да и какая разница пользователю, как реализована функция? Ему важно, сложно или нет кнопки нажимать. Варианты пользовательского интерфейса, конечно, могут совершенствоваться.

Если все-таки принять скул серверный вариант дерева, то имеет ли смысл создавать трехзвенку

Объемы данных для масштабов СУБД мизерные. Это же не миллионы позиций, а максимум тысячи. И максимум - десятки клиентов.  Усложнять систему нет никакого смысла. Все может быть организовано и на файл-сервере и на разделяемом ресурсе - в рамках проводимой системной политики.
Хранение данных на удаленном сервере предусматривается более для возможности доступа к ним через Интернет. Для САПР это не очень-то нужно, разве что для стандартизации классификатора слоев. Важнее в ГИС, где много удаленных организаций должны работать с одними данными.

Re: Организация дерева меню

Спасибо...
1. Пока говорю именно об иллюстрированных меню программ (конкретно по примеру рассмотренному в книге Н.Н. Полищука "Автокад 2002").
2.В книге написано что комманд несколько тысяч в Вашей системе. по описанию я увидел, что один файл соответствует нескольким коммандам,потому и предполагал что их тысячи (плюс еще картинки с изображениями).
3. А смысл произвольной структуры (применительно к данному примеру). И чем неудобно редактировать записи БД. Конечно XML можно редактировать без программы-оболочки (точно также можно и внутрь отдельных записей БД залесть) но таким образом очень легко нарушить целостность данных - потерянные файлы, конфликты имен и т.д.
4. Да нет все-таки разбор дерева в Вашем варианте сложнее, конечно конечному пользователю это не важно, однако время которое я потрачу на разбор дерева хранимой процедурой будет намного меньше, а триггеры проконтролируют соответсвие записей друг другу (имеется ввиду время потраченное на написание функций).
5. Клиент-серверная технология создания дерева будет автоматом добавлять клиентам новые пункты меню как только программер их написал и занес в базу (лисп файлы для апдейта тоже хранятся в базе). А как релизовать это с XML?
6. Насчет объемов - не согласен - занесите туда каталоги металлопроката, ЖБИ, и объем наберется порядочный - регулярно обновляемый и доступный всем сразу...
7. Контроль за нелегальным использованием вашего ПО - права доступа разграничат все...

Re: Организация дерева меню

> Евгений, Екатеринбург
В одном файле может быть разное количество "команд", а команда может создавать много вариантов изображений.
Произвольная структура позволяет хранить данные с различными атрибутами (в терминах XML). Создавать разные атрибуты, отображать данные в различном виде. Собственно все, ради чего и был придуман XML.
Преимущества баз данных, особенно клиент-серверных известны. Так же как их недостатки. Программисты часто страдают излишествами - для любых данных непременно БД, да еще клиент-серверную. Тем самым обеспечивают себя работой, так как программы, основанные на СУБД часто без авторов не работают.
Занести каталоги мало. Надо их как-то использовать. А это - разработка софта. Да и не так уж много необходимых материалов. Велика ли и часто ли меняется номенклатура прокатных профилей? Но если они действительно необходимы всем и сразу - конечно надо использовать SQL-субд. И прилагающийся персонал.
Но это уже не меню.

Re: Организация дерева меню

Разработал..... Все работает... Почти все...
Добавил еще стек команд (на 100 команд) и список популярных команд (по последней сотне выбранных).
Проблем с загрузкой блобов (картинок) особых нет - разрешение картинок 320х240.. Были тормоза (порядка 0,5 секунды) при картинках 2560х1920...
Пояснение к команде то же блоб - форматированный текст...
При выборе команды проверяется наличие необходимых файлов (*.dwg *.lsp) на компе пользователя и при надобности они добавляются из базы (т.е. в дистриб включать их бессмысленнно)
Правда запускаю прогу как внешнюю, что не очень красиво...
Как запустить в виде функции пока не догадался...
Есть и вопрос - номер выделенного элемента в TTreeview определяется свойством Selected.AbsoluteIndex но это свойство только для чтения... А как назначить его программно, т.е. типа
Treeview1. Selected.AbsoluteIndex=62 А то при повторном запуске программы дерево оказывается свернутым.....

Re: Организация дерева меню

Если я правильно понял, то

TreeView1.Items[62].Selected:=true;

Re: Организация дерева меню

Спасибо... Все правильно...