Вверх ↑
Этот топик читают: Гость
Ответов: 2125
Рейтинг: 159
#1: 2006-09-20 11:19:09 ЛС | профиль | цитата
Идея такая: засунуть в базу всё, кроме исходников компонентов, даже иконки. Кроме того, сделать список компонент общим для всех пакетов, с возможностью назначать компоненты пакетам, как это сделано с компиляторами. Хинты нужно также хранить в отдельной таблице, для каждого языка - свои.
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#2: 2006-09-20 13:49:27 ЛС | профиль | цитата
И какие в этом плюсы?
карма: 27
0
Ответов: 9906
Рейтинг: 351
#3: 2006-09-20 13:57:06 ЛС | профиль | цитата
я понял так: многоязычие, исключить дубли иконок для пакетов, тоже может касаться help-а
карма: 9

0
Ответов: 2125
Рейтинг: 159
#4: 2006-09-20 14:10:03 ЛС | профиль | цитата
Я опять про локализацию. Чтобы сделать хинты зависимыми от выбранного языка, их лучше поместить в базу, соответственно точки и свойства компонентов тоже пойдут туда, т.к. хинты к ним привязаны, т.е. помещаем .ini файлы компонентов в базу. Список проектов - аналогично. Имена пунктов меню (хинты к командам) - тоже. Настройки компиляторов и привязка их к проектам. Иконки - чтобы не было милиона мелких файлов. И чтобы они не дублировались для пакетов, можно сделать один общий список компонент, и привязывать их к пакетам, как компиляторы. Можно даже автоматом, если присутствует файл hi<Имя компонента>.* в каталоге code.

Плюсы: не нужно парсить кучу текстовых файлов, нормальная локализация программы, меньше файлов на диске (кто-то жаловался на большой размер кластера), возможность показывать/скрывать компоненты в палитре, для разработчика компонент для других пакетов уменьшается список действий по добавлению реализации компонента, а также возможность хранить разные версии компонент, если их несколько.
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#5: 2006-09-20 14:15:53 ЛС | профиль | цитата
а также возможность хранить разные версии компонент, если их несколько.

Компонент идентифицируется по своему имени. Каким образом база данных поможет хранить разные его версии?
карма: 27
0
Ответов: 2125
Рейтинг: 159
#6: 2006-09-20 15:18:19 ЛС | профиль | цитата
Каким образом база данных поможет хранить разные его версии?
В отдельной таблице можно хранить разные версии программного кода компонента, идентифицируя его по коду версии или тройке (пакет,имя элемента,хэш):
CodeVersion (codevers_id,packet_id,elem_id, vers, date, hash, code_text)
При выборе пользователем соответствующей версии code_text записывается в файл. Изначально, эта таблица может быть пустой, но при установке новой версии, старую нужно будет тоже сохранить. А можно хранить код только в базе, а в файлы используемых компонентов записывать временно, до тех пор пока HiAsm не закроют.
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#7: 2006-09-20 15:40:34 ЛС | профиль | цитата
Пожалуй идея размазать ini файл по некоторой структуре BD имеет больше плюсов, чем минусов. Действительно проблема локализации решается почти автоматом, кроме того появляется "бесплатная" возможность организовать наследование методов и св-тв(вечная проблема для Win элементов), ну и избавиться от дублирования всего, что только возможно.
карма: 27
0
Ответов: 2125
Рейтинг: 159
#8: 2006-09-20 15:54:57 ЛС | профиль | цитата
Кстати, по поводу базы: идентификатор элемента лучше всё-таки сделать числовой, а не строкой, а эту имеющуюся на данный момент строку обозвать как prog_id.

А будет-ли общий список компонент с привязкой к пакетам?
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#9: 2006-09-20 16:11:48 ЛС | профиль | цитата
Не вижу пока более менее логичного постраения структуры БД, при котором учитывается возможность попадания одного и того же компонента в разные пакеты с условием, что один из пакетов поддерживает только часть его св-тв/методов.
карма: 27
0
Ответов: 2125
Рейтинг: 159
#10: 2006-09-20 17:48:25 ЛС | профиль | цитата
с условием, что один из пакетов поддерживает только часть его св-тв/методов
Дополнительные таблицы:

PropertyConPacket (prop_id, packet_id)
MethodConPacket (method_id, packet_id)
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#11: 2006-09-20 18:43:46 ЛС | профиль | цитата
Получается примерно так:
------------------------------------------------------------------------------
Основная таблица конфигурации элемента(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)
  • id  codename  name  info_id  units
    Набор компиляторов пакета(pack_compilers)
  • pack_id  cmp_id  active
    Набор проектов пакета(projects)
  • id  pack_id  entry  name_id  info_id  ext  make
    Набор элементов пакета XXX(XXXPack)
    (копия Elements.db с числовым полем id)

    Запрет на показ методов элементов пакета(DisableMethods)
    el_id  mt_id  pack_id

    Запрет на показ св-тв элементов пакета(DisablePropertys)
    el_id  prop_id  pack_id

    ------------------------------------------------------------------------------
  • Набор меню и панелей управления(menus) id  name  info_id

  • Команды среды(commands) id  name  info_id

  • Содержимое меню и панелей управления(menu_commands) menu_id  cmd_id  pos

    ------------------------------------------------------------------------------
  • Локализация(Localization) id  pref  info  active

  • Локализация названий языка XXX(info_id_XXX) (именно сюда ссылаются все поля info_id) id  info

    ------------------------------------------------------------------------------
  • Компиляторы(Compilers) id  name  cmd  path  ext

    ------------------------------------------------------------------------------
  • Привязка расширений к редакторам(ext_assign) ext_name  ext  info_id

    ------------------------------------------------------------------------------

  • - реализованы
  • карма: 27
    0
    Ответов: 2125
    Рейтинг: 159
    #12: 2006-09-26 10:59:57 ЛС | профиль | цитата
    Набор элементов пакета XXX(XXXPack)
    А почему отдельная таблица для каждого пакета, почему бы просто не добавить pack_id в таблицу, то есть не копия Elements.db, а пара (pack_id, el_id), аналогично PackCompilers? А для локализации можно тоже сделать одну таблицу LocName (например с общеупотребимым английским названием), но добавить таблицу с переводом для каждого языка LocText (lc_id, info_id, lc_text) и если нет перевода для выбранного языка - использовать английский эквивалент (запрос будет с left outer join).
    карма: 1

    0
    Ответов: 9906
    Рейтинг: 351
    #13: 2006-09-26 11:05:54 ЛС | профиль | цитата
    tsdima писал(а):
    если нет перевода для выбранного языка - использовать английский эквивалент
    если нет перевода с какого языка
    карма: 9

    0
    Ответов: 2125
    Рейтинг: 159
    #14: 2006-09-26 11:07:58 ЛС | профиль | цитата
    если нет перевода с какого языка
    ... с английского
    карма: 1

    0
    Администрация
    Ответов: 15295
    Рейтинг: 1519
    #15: 2006-09-26 12:29:06 ЛС | профиль | цитата
    А почему отдельная таблица для каждого пакета, почему бы просто не добавить pack_id в таблицу, то есть не копия Elements.db, а пара (pack_id, el_id)

    При такой структуре удобнее хранить все в одной базе.

    Перевод впринципе можно и в одной таблице хранить.
    карма: 27
    0
    15
    Сообщение
    ...
    Прикрепленные файлы
    (файлы не залиты)