Идея такая: засунуть в базу всё, кроме исходников компонентов, даже иконки. Кроме того, сделать список компонент общим для всех пакетов, с возможностью назначать компоненты пакетам, как это сделано с компиляторами. Хинты нужно также хранить в отдельной таблице, для каждого языка - свои.
Этот топик читают: Гость
Ответов: 2125
Рейтинг: 159
|
|||
карма: 1 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
И какие в этом плюсы?
|
|||
карма: 27 |
|
Ответов: 9906
Рейтинг: 351
|
|||
я понял так: многоязычие, исключить дубли иконок для пакетов, тоже может касаться help-а
|
|||
карма: 9 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Я опять про локализацию. Чтобы сделать хинты зависимыми от выбранного языка, их лучше поместить в базу, соответственно точки и свойства компонентов тоже пойдут туда, т.к. хинты к ним привязаны, т.е. помещаем .ini файлы компонентов в базу. Список проектов - аналогично. Имена пунктов меню (хинты к командам) - тоже. Настройки компиляторов и привязка их к проектам. Иконки - чтобы не было милиона мелких файлов. И чтобы они не дублировались для пакетов, можно сделать один общий список компонент, и привязывать их к пакетам, как компиляторы. Можно даже автоматом, если присутствует файл hi<Имя компонента>.* в каталоге code.
Плюсы: не нужно парсить кучу текстовых файлов, нормальная локализация программы, меньше файлов на диске (кто-то жаловался на большой размер кластера), возможность показывать/скрывать компоненты в палитре, для разработчика компонент для других пакетов уменьшается список действий по добавлению реализации компонента, а также возможность хранить разные версии компонент, если их несколько. |
|||
карма: 1 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
а также возможность хранить разные версии компонент, если их несколько.
Компонент идентифицируется по своему имени. Каким образом база данных поможет хранить разные его версии? |
|||
карма: 27 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Каким образом база данных поможет хранить разные его версии? В отдельной таблице можно хранить разные версии программного кода компонента, идентифицируя его по коду версии или тройке (пакет,имя элемента,хэш):
CodeVersion (codevers_id,packet_id,elem_id, vers, date, hash, code_text) При выборе пользователем соответствующей версии code_text записывается в файл. Изначально, эта таблица может быть пустой, но при установке новой версии, старую нужно будет тоже сохранить. А можно хранить код только в базе, а в файлы используемых компонентов записывать временно, до тех пор пока HiAsm не закроют. |
|||
карма: 1 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Пожалуй идея размазать ini файл по некоторой структуре BD имеет больше плюсов, чем минусов. Действительно проблема локализации решается почти автоматом, кроме того появляется "бесплатная" возможность организовать наследование методов и св-тв(вечная проблема для Win элементов), ну и избавиться от дублирования всего, что только возможно.
|
|||
карма: 27 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Кстати, по поводу базы: идентификатор элемента лучше всё-таки сделать числовой, а не строкой, а эту имеющуюся на данный момент строку обозвать как prog_id.
А будет-ли общий список компонент с привязкой к пакетам? |
|||
карма: 1 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Не вижу пока более менее логичного постраения структуры БД, при котором учитывается возможность попадания одного и того же компонента в разные пакеты с условием, что один из пакетов поддерживает только часть его св-тв/методов.
|
|||
карма: 27 |
|
Ответов: 2125
Рейтинг: 159
|
|||
с условием, что один из пакетов поддерживает только часть его св-тв/методов Дополнительные таблицы:
PropertyConPacket (prop_id, packet_id) MethodConPacket (method_id, packet_id) |
|||
карма: 1 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Получается примерно так:
------------------------------------------------------------------------------ Основная таблица конфигурации элемента(ElementConfig) id name author mail version class_id info_id sub Таблица св-тв(Propertys) id name info_id type value list Таблица методов(Methods) id name info_id type data_type Таблица описания св-тв элемента(ElementPropertys) el_id prop_id default tomethod pos Таблица описания методов элемента(ElementMethods) el_id mt_id visible pos Таблица возможных классов элемента(ElementClasses) id name Таблица групп св-тв элемента(PropGroups) id name Таблица наборов св-тв, входящих в данную группу(ElementPropGroups) gr_id el_id prop_id ------------------------------------------------------------------------------ Набор пакетов(Packs) Набор компиляторов пакета(pack_compilers) Набор проектов пакета(projects) Набор элементов пакета XXX(XXXPack) (копия Elements.db с числовым полем id) Запрет на показ методов элементов пакета(DisableMethods) el_id mt_id pack_id Запрет на показ св-тв элементов пакета(DisablePropertys) el_id prop_id pack_id ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ |
|||
карма: 27 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Набор элементов пакета XXX(XXXPack) А почему отдельная таблица для каждого пакета, почему бы просто не добавить pack_id в таблицу, то есть не копия Elements.db, а пара (pack_id, el_id), аналогично PackCompilers? А для локализации можно тоже сделать одну таблицу LocName (например с общеупотребимым английским названием), но добавить таблицу с переводом для каждого языка LocText (lc_id, info_id, lc_text) и если нет перевода для выбранного языка - использовать английский эквивалент (запрос будет с left outer join). |
|||
карма: 1 |
|
Ответов: 9906
Рейтинг: 351
|
|||
tsdima писал(а): если нет перевода для выбранного языка - использовать английский эквивалент |
|||
карма: 9 |
|
Ответов: 2125
Рейтинг: 159
|
|||
если нет перевода с какого языка ... с английского |
|||
карма: 1 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
А почему отдельная таблица для каждого пакета, почему бы просто не добавить pack_id в таблицу, то есть не копия Elements.db, а пара (pack_id, el_id)
При такой структуре удобнее хранить все в одной базе. Перевод впринципе можно и в одной таблице хранить. |
|||
карма: 27 |
|
15