Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Люди, свершилось. Я сделал объектное ядро
|
|||
|---|---|---|---|
|
#18+
Спешу поделиться своей радостью :-) Пишу на Дельфи и МССкуль На сервере класс представлен таблицей и четырьмя процедурами Open, Create, Save, Delete имя хранимой процедуры состоит из наименования класса и вышеперечисленного, например, DBOClient_Open На клиенте написал компонент, TDBObject, имеет методы: Retrieve - вытаскивает все атрибуты объекта, то есть все поля всех таблиц, принадлежащих классу. Работает так: есть специальная процедура, которая по параметру @Class вытаскивает все процедуры с окончанием Open и началом имени класса, начиная от базового до текущего. Затем получив список процедур. открываем их все по идентификатору объекта @OID Можно получить любой атрибут, написав так DBObject['Name'], можно изменить значения. Далее есть метод Save Он работает аналогично, вытаскиваются все процедуры сохранения объекта, названия параметров соответствуют названиям полей процедур Open, заполняются автоматически. и вызывается ExecProc Для подчиненных таблиц объекта все очень похоже: Названия процедур формируются так DBOMeasure_Rates_Open и DBOMeasure_Rates_Save. Имеется компонент унаследованный от хранимой процедуры, который кешированно позволяет менять данные, а при сохранении для каждой записи вызывает процедуру Save, заполняя параметры значениями из полей датасета. К подчиненной таблице можно обратиться так: DBObject['Rates'] В форме все выглядит так: У формы есть методы Init и Save В методе Init пишем begin inherited; edtMeasure.OID := DBObject['MeasureOID']; dbgRates.DataSet := DBObject['Rates']; end; В методе Save: begin inherited; DBObject['MeasureOID'] := edtMeasure.OID; //Rates назад присваивать не надо так как это датасет и данные меняются прямо в нем. end; в базовой форме после вызова метода Save, вызывается DBObject.Save; Для подчиненных таблиц у меня используется грид. Если постараться и написать DBAware контролы для атрибутов объекта, то можно будет форму на лету формировать. Так что вся разработка останется только на сервере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2004, 02:32 |
|
||
|
Люди, свершилось. Я сделал объектное ядро
|
|||
|---|---|---|---|
|
#18+
кто во што :-) ну, ну... рад за тебя :-) смотри 1с не сделай. не по функциональности а по производительности :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2004, 02:57 |
|
||
|
Люди, свершилось. Я сделал объектное ядро
|
|||
|---|---|---|---|
|
#18+
Думаю в периоды начинаний в программировании все подходили к этму вопросу, но он оставался нерешенным, а для такой вещи, как формирование форм на лету, можно поставить отдельный сервер с минимальным временем откоика(mysql к примеру), и останется оптимизировать код клиента для формирования форм. А для тех кто над такими вещами посмеивается, думается, что у самих не получилось, теперь и посмеиваются ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2004, 10:08 |
|
||
|
Люди, свершилось. Я сделал объектное ядро
|
|||
|---|---|---|---|
|
#18+
Такое ощущение, что каждый день по нескольку таких систем пишется :-) Просмотров много, а ответов всего два. alex_k 1С по производительности может получится, если люди начнут логику писать на клиенте. Я сделал компонент только для того чтобы на форме его удобно было использовать (вытащить объект, изменить, сохранить). Кроме того этот комонент можно будет превратить в COM-объект. И тогда пишите клиента на чем хотите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2004, 12:18 |
|
||
|
Люди, свершилось. Я сделал объектное ядро
|
|||
|---|---|---|---|
|
#18+
если интересно, попробуй покопать типы данных в юконе, эта информация может быть полезна. кроме того, почему бы не воспользоваться какой-нить объектной базой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2004, 12:34 |
|
||
|
Люди, свершилось. Я сделал объектное ядро
|
|||
|---|---|---|---|
|
#18+
AAron Работать с реляционными данными гораздо удобнее в реляционной базе. И работать быстрее будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2004, 12:40 |
|
||
|
Люди, свершилось. Я сделал объектное ядро
|
|||
|---|---|---|---|
|
#18+
Собираюсь в дальнейшем переписать на дотНет. И базу использовать Юкон ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2004, 12:45 |
|
||
|
Люди, свершилось. Я сделал объектное ядро
|
|||
|---|---|---|---|
|
#18+
А нигде не было написано, что данне реляционные. Скорее можно было бы ожидать объектные данные (ведь происходит сохранение объектов). Кроме того, если один из атрибутов объекта представляет собой объект, его тоже нужно сохранять как объект. Ну и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2004, 13:50 |
|
||
|
Люди, свершилось. Я сделал объектное ядро
|
|||
|---|---|---|---|
|
#18+
База нужна ведь не только для того чтобы хранить объекты. Хранить их естественно гораздо удобнее в объектной базе, но вот обрабатывать списки данных эффективно можно только в реляционной, поэтому в базе у меня все реляционно, а на клиенте объектно. Самая эффективная связка. Может конечно разработчику и не очень легко будет в этом разбираться, но пусть тогда, те кто этого не может, катяться куда подальше. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2004, 14:14 |
|
||
|
Люди, свершилось. Я сделал объектное ядро
|
|||
|---|---|---|---|
|
#18+
автор но пусть тогда, те кто этого не может А потом рождаются такие фразы "А CBoss его знает". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2004, 09:56 |
|
||
|
Люди, свершилось. Я сделал объектное ядро
|
|||
|---|---|---|---|
|
#18+
Советую воспользоваться поиском по форуму. Ключевое слово "междумордие". Там есть куча мнений по подобному вопросу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2004, 17:56 |
|
||
|
Люди, свершилось. Я сделал объектное ядро
|
|||
|---|---|---|---|
|
#18+
to Old Nick Такое ощущение, что каждый день по нескольку таких систем пишется :-) Просмотров много, а ответов всего два. ___________________________ Чтобы паства возрадовалась, нужно чтобы каждый что-то с этого поимел. Так что: Постановка задачи - идея, план работ - конкретика, прототип - описание, полученные результаты - сравнение с существующими решениями ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2004, 20:12 |
|
||
|
Люди, свершилось. Я сделал объектное ядро
|
|||
|---|---|---|---|
|
#18+
Что оно хоть делает-то, это объектное ядро? Ежели станете объяснять, то пожалуйста, по-простому, на пальцах. Что здесь объект (они ведь тоже разные бывают), куда мы хотим его засунуть, как это делается (только не надо названий методов и переменных... все равно здесь это никто не поймет) ну и тд, и тп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2004, 20:58 |
|
||
|
Люди, свершилось. Я сделал объектное ядро
|
|||
|---|---|---|---|
|
#18+
Попробую немного описать: Есть метод Retrieve(OID: Integer), который и вытаскивает все все данные. Вызывать его можно хоть где и хоть когда. Но в данный момент он вызывается из контекстного меню, и затем открывается форма. самое интересное, можно сделать так: var dbo: TDBObject; begin dbo := TDBObject.Create('DBObject'); --Абстрактный класс dbo.Retrieve(155); // Допустим это OID объекта класса документ DBOOrder в таком случает откроется только его наименование и FolderOID, что и нужно для открытия контекстного меню. Объект в этом случае будет ReadOnly. var dbo: TDBObject; begin dbo := TDBObject.Create('DBObject'); try dbo.Retrieve(155); // Допустим это OID объекта класса документ dbo.AssignPopup(FPopupMenu); finally dbo.Free; end; end; А форма открывается так: procedure TDBOMenuItem.Click; var dbo := TDBObject; begin dbo := TDBObject.Create(DBClass); dbo.Retrieve(OID); dbo.Execute(Method); // Формы в системе зарегистрированы для всех public методов, таких как Просмотр, Редактировать, Создать новый, Переместить, Удалить и т.д. Для наследников можно добавлять новые и перекрывать имеющиеся методы. В итого Execute по классу и методу находит нужный класс формы и создает экземпляр. Затем передается себя в свойство DBObject: TDBObject и вызывает метод Init; end; Объект удаляется по закрытию формы. Кроме того у объекта есть еще и private методы (Формы - это public). То есть: DBObject['Name'] := 'П%'; DBObject.StoredProc('Find').Open; if DBObject.StoredProc('Find').RecordCount = 1 then DBObject.Retrieve(DBObject.StoredProc('Find')['OID']); if DBObject.StoredProc('Find').RecordCount > 1 then DBObject.Execute('Find'); //Открывается форма со списком найденных объектов для выбора //конкретного (Это уже public) if DBObject.StoredProc('Find').RecordCount = 0 then ShowMessage('По вашему запросы объекты не найдены'); Так что задача программиста просто писать новые классы на серваке и регистрировать новые формы, например новый класс (Создадим клиента, унаследованного от базового класса DBObject. У базового класса есть наименование, там мы будем хранить ФИО, но нам нужен еще адрес): exec RegisterClass 'DBOClient', 'DBObject' create table Clients ( OID int not null, Address varchar(255), primary key clustered ( OID ) ) go create procedure DBOClient_Open @OID int as select * from Clients where OID = @OID go create procedure DBOClient_Create @OID int, @Address varchar(255) as insert Clients select @OID, @Address go create procedure DBOClient_Save @OID int, @Address varchar(255) as update Clients set Address = @Address where OID = @OID go create procedure DBOClient_Delete @OID int as delete Clients where OID = @OID go Вот и все. Все остальное знает система. Нужно только новую форму зарегистрировать, т.к. в базовой у нас нет поля для адреса: TfrmDBOClientEdit = class(TfrmDBObjectEdit) edtAddress: TEdit; public procedure Init; override; procedure Save; override; end; implementation procedure TfrmDBOClientEdit.Init; begin inherited; edtAddress.Text := DBObject['Address']; end; procedure TfrmDBOClientEdit.Save; begin inherited; DBObject['Address'] := edtAddress.Text; end; регистрируем форму в юнит-файле RegClasses процедурой RegisterClass('TfrmDBOClientEdit') Теперь можно создавать объекты класса DBOClient, нажав кнопку создать и выбрав класс. Или редактировать, щелкнув правой кнопкой на объекте в эксплорере (Это спец форма для списка объектов) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2004, 12:29 |
|
||
|
Люди, свершилось. Я сделал объектное ядро
|
|||
|---|---|---|---|
|
#18+
guest Постановка задачи - идея, минимизировать разработку приложений и исключить ошибки. план работ - конкретика, прототип - описание, полученные результаты - сравнение с существующими решениями Существующие решения либо имеют ограничения по функционалу (1С) либо низкую скорость работы (1С:) В моем ядре максимально используется реляционный механизм, при этом программист описывает сущности используя наследование, при этом сильное облегечение в разработке т.к. Не нужно повторяться с описанием одинаковых действий. Можно наращивать функционал никак не ущемляя имеющийся. Также нет ограничений по интерфейсу. Пишите формы какие хотите, наследуйте только от BaseForm или от форм базовых классов задача программиста регистрировать новые сущности и новые формы, не заботясь о том как они вызываются, как к ним идет обращение. Этим занимается ядро ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2004, 13:19 |
|
||
|
Люди, свершилось. Я сделал объектное ядро
|
|||
|---|---|---|---|
|
#18+
Я так понял: Объект: Данные хранятся на сервере в базе (создаем руками), Методы на сервере в ХП (создаем руками), Создаем руками программный объект, который как-то связан с конкретными ХП. далее при обращении к методам объекта вызываются ХП этого объекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2004, 15:52 |
|
||
|
Люди, свершилось. Я сделал объектное ядро
|
|||
|---|---|---|---|
|
#18+
Guest Я так понял: Объект: Данные хранятся на сервере в базе (создаем руками), Методы на сервере в ХП (создаем руками), Создаем руками программный объект, который как-то связан с конкретными ХП. далее при обращении к методам объекта вызываются ХП этого объекта. Почти все правильно. На клиенте объект создавать не надо. Компонент по указанному классу полностью инкапсулирует в себе все данные сервера для заданного класса и идентификатора объекта. Можно провести аналогию с компонентом, например, TADOTable. Указываешь TableName и все поля вытаскиваются. Мой компонент отличается от TADOTable также как Class отличается от record (struct) (добавилось наследование и методы) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2004, 16:00 |
|
||
|
Люди, свершилось. Я сделал объектное ядро
|
|||
|---|---|---|---|
|
#18+
Если не в лм, посмотрите типизированные таблицы и их методы в DB2 или ORACLE. Похоже это уже сделано более качественно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2004, 16:11 |
|
||
|
Люди, свершилось. Я сделал объектное ядро
|
|||
|---|---|---|---|
|
#18+
Там наследования нет. Я уже давно все проштудировал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2004, 16:39 |
|
||
|
Люди, свершилось. Я сделал объектное ядро
|
|||
|---|---|---|---|
|
#18+
наследования или полиморфизма? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2004, 17:12 |
|
||
|
Люди, свершилось. Я сделал объектное ядро
|
|||
|---|---|---|---|
|
#18+
да ни того, ни другого толком нет. В Оракле например, если создать тип объект унаследованный, то создать таблицу по нему нельзя. Как это называется. Нахрена тогда наследование? Уж лучше на джаве тогда писать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2004, 17:14 |
|
||
|
Люди, свершилось. Я сделал объектное ядро
|
|||
|---|---|---|---|
|
#18+
Я сам толком в этом не разбирался, но проде все эти объектные расширения работать должны. Что точно помню, так это в ДБ2 нельзя методы объектов перегружать... Да и пока что небыло необходимости заниматься объектной моделью. Реляционная вполне устраивала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2004, 18:39 |
|
||
|
Люди, свершилось. Я сделал объектное ядро
|
|||
|---|---|---|---|
|
#18+
Меня реляционная модель тоже вполне устраивает. Главное в программировании вообще и в БД и ООП - это нормализация данных. Если каждая сущность лежит в своей таблице или классе то все очень легко решается. Но реляционной модели не хватает наследования, хотя его можно легко держать в голове. Но для этого нужно быть опытным программистом. Моей целью было избавить прикладного разработчика от реализации связей. Любой хорошо знающий ООП, сможет быстро разобраться в моей системе и быстро начать решать прикладные задачи, причем любые. Сейчас пишу производство. Хотелось бы описать систему очень подробно, но не люблю я это писать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2004, 19:06 |
|
||
|
Люди, свершилось. Я сделал объектное ядро
|
|||
|---|---|---|---|
|
#18+
Хотелось бы описать систему очень подробно, но не люблю я это писать. _____________________________ Ну а посмотреть (пощупать) на это объектное ядро как нибудь можно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2004, 21:28 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=32466020&tid=1545838]: |
0ms |
get settings: |
11ms |
get forum list: |
23ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
185ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 283ms |
| total: | 591ms |

| 0 / 0 |
