14 сент. 2009 г.

Таблица для классов

Выше (или правильнее будет сказать ниже) мы уже обращались к теме Исследователя и проблеме совмещения информации о правах доступа с визуальным меню. Решение — отделить информацию о правах от набора команд, доступных пользователю. Для этого придется добавить в платформу таблицу с иерархией классов бизнес-объектов и, возможно, экранных форм. Что-нибудь вроде:

CREATE TABLE gd_class (
   id          dintkey,
   parent      dparent,
   name        dname,
   is_subtype  dboolean_notnull,
   aview       dsecurity,
   achag       dsecurity,
   afull       dsecurity
)

Странно, что это не было сделано до сих пор. Содержимое таблицы GD_COMMAND с самого начала рассматривалось больше, как дерево команд на экране, а не иерархия классов внутри платформы. Наверное, в нашем сознании, классы были настолько неотъемлемой частью именно программы, что возможность поместить их в реляционную таблицу не рассматривалась даже тогда, когда бизнес-объекты своими подтипами уже фактически зависли где-то между выполняемым модулем и базой данных.

Создав такую таблицу, сразу возникает вопрос: в какой момент ее заполнять? Не хотелось бы вешать еще одну синхронизацию в момент загрузки программы, наподобие синхронизации информации о структуре БД. Однако, жестко прописывать информацию в базе и требовать от разработчика модифая после каждого изменения иерархии классов, тоже не лучший выход.

На вскидку, еще несколько областей, где таблица со списком классов была бы востребована:
  1. При определении какие поля атрибуты следует включать в запрос бизнес-объекта по-умолчанию. Сейчас соответствующая информация хранится в текстовом виде в поле OBJECTS таблицы AT_RELATION_FIELDS.
  2. Дерево классов в Проводнике Редактора скрипт-объектов можно было бы строить непосредственно по этой таблице.

Комментариев нет:

Отправить комментарий