Хранение кода в базе данных - как
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Хранение кода в базе данных - как Expand / Collapse
Автор
Сообщение
02.03.2007 20:42
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior Member

участник
Last Login: 02.03.2007 20:40
Сообщ.: 12, Visits: 112
Хочу хранить код (модуль) в базе данных.
Код представляет собой набор функций.

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

Каким способом добиться максимальной производительности (хочется хранить уже скомпилированный код)?

Код - простейший.
В основном это обращения к методам других объектов, конструирование объектов (список доступных классов опять же в коллекции глобальных переменных), арифметические и строковые операции, ветвления.

То бишь хочется такого: когда я создаю некий объект, я залажу в базу данных (или кэш) и в переменную Code этого объекта заношу уже скомпилированный код этого объекта.

Далее, когда идет обращение к методу например Test() этого объекта, нужно чтобы вызвался метод Test этого объекта.


Или другой, более конкретный пример.

Например я описал классы для базовых элементов - документов, справочников, регистров накопления и т.д.
Допустим я объявляю новый класс справочника номенклатуры Reference_Goods, наследуемый от класса справочники Reference.

Так вот, конкретные вопросы:
1. Как мне сделать, чтобы при выполнении кода я мог сконструировать экземпляр этого класса, т.е. где должно быть размещено хранилище классов.
2. Можно скомпилировать только этот класс (DLL), не перекомпилируя весь код приложения (EXE). То бишь вообще можно компилировать все классы отдельно, а
3. Как мне объявлять в коде обращение к методам класса, если класс неопределен? Использовать метод, который возвращает имя класса и преобразовывать к этому классу или можно как-то прозрачнее реализовать?
   for each el in collection do
       Msg(Convert(el, el.GetType()).GetShtrihCode());
   next
   а хочется просто:
   for each el in collection do
       el.GetShtrihCode();
   next

Есть ли в Pascal /delpy нетипизированный объект как в 1С?
То бишь если x - variant, то как программа при этапе выполнения (а не компиляции) поймет как ей выполнять метод X.PRINT(), даже если этот метод действительно есть у объекта Х?
И сильно ли будет тормозить такой нетипизированный объект.
А как отыграть трюк 1С x["Print"](), т.е. вызов метода по имени?

4. Желательно, чтобы приложение и код пользовательских классов были написаны на одном языке, если я буду использовать Pascal, а разрабатывать приложение в Delpy, смогу ли я достать свободно распространяемый небольшого объема компилятор, чтобы компилировать только пользовательские классы? Основное приложение уже будет скомпилировано.
5. Учитывая, что скорее всего это все будет под KYLYX, те же вопросы и под Linux.

То есть в идеале я хочу иметь набор откомпилированных классов:
Application, Documents, References, Document_Invoice:Documents, Document_Income:Documents, Reference_Goods:References
Нужно их как-то объединить, чтобы можно было создавать любой из этих классов динамически и обращаться к свойствам и методов этих классов.

То бишь работа приложения начнется с создания класса Application.
Метод Application:OnStart может выглядеть так

S=New Reference_Users; //Создаем класс справочника
//Как вариант можно так
//S=References.Create("Users");
//где References - глобальная переменная, хранящая экземпляр класса справочники, аналог Справочники 1С80

R=S.SearchByName(This.CurrentUserName); //Ищем по наименованию
//Если не найден, создаем справочник пользователя
If R=Nothing Then
   SO=S.CreateNew();  
   SO.Name=This.CurrentUserName; //Даем этому справочнику имя пользователя.
   SO.Save();
   S=SO.Link;
EndIF
This.Globals.Add("CurrentUser", S); //Запоминаем в параметрах сеанса текущего пользователя
Желательно также, чтобы классы подгружались только по мере их создания.

Как видно в примере, используется язык без явной типизации (типо Visual Basic).
Конечно если писать на Kylyx(Delphi) придется подумать, как это реализовать.

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

Тогда форма справочника наследует от базовой формы Form, форма документа тоже от Form.
Форма Form может привязывать к некоторому своему элементу управления Control данные. В Control содержится реквизит Data (аналог данные 1С).
Form справочника умеет передавать данные из объекта справочника этому Control и т.п.

Сообщ. #911225
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 12:24