Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Люди, свершилось. Я сделал объектное ядро / 25 сообщений из 105, страница 1 из 5
31.03.2004, 02:32
    #32463008
Old Nick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Люди, свершилось. Я сделал объектное ядро
Спешу поделиться своей радостью :-)
Пишу на Дельфи и МССкуль

На сервере класс представлен таблицей и четырьмя процедурами
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 контролы для атрибутов объекта, то можно будет форму на лету формировать. Так что вся разработка останется только на сервере.
...
Рейтинг: 0 / 0
31.03.2004, 02:57
    #32463013
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Люди, свершилось. Я сделал объектное ядро
кто во што :-)
ну, ну... рад за тебя :-)
смотри 1с не сделай. не по функциональности а по производительности :-)
...
Рейтинг: 0 / 0
31.03.2004, 10:08
    #32463262
brahew
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Люди, свершилось. Я сделал объектное ядро
Думаю в периоды начинаний в программировании все подходили к этму вопросу, но он оставался нерешенным, а для такой вещи, как формирование форм на лету, можно поставить отдельный сервер с минимальным временем откоика(mysql к примеру), и останется оптимизировать код клиента для формирования форм.
А для тех кто над такими вещами посмеивается, думается, что у самих не получилось, теперь и посмеиваются
...
Рейтинг: 0 / 0
31.03.2004, 12:18
    #32463619
Old Nick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Люди, свершилось. Я сделал объектное ядро
Такое ощущение, что каждый день по нескольку таких систем пишется :-)
Просмотров много, а ответов всего два.

alex_k

1С по производительности может получится, если люди начнут логику писать на клиенте. Я сделал компонент только для того чтобы на форме его удобно было использовать (вытащить объект, изменить, сохранить).

Кроме того этот комонент можно будет превратить в COM-объект.
И тогда пишите клиента на чем хотите.
...
Рейтинг: 0 / 0
31.03.2004, 12:34
    #32463660
AAron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Люди, свершилось. Я сделал объектное ядро
если интересно, попробуй покопать типы данных в юконе, эта информация может быть полезна.

кроме того, почему бы не воспользоваться какой-нить объектной базой?
...
Рейтинг: 0 / 0
31.03.2004, 12:40
    #32463677
Old Nick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Люди, свершилось. Я сделал объектное ядро
AAron

Работать с реляционными данными гораздо удобнее в реляционной базе. И работать быстрее будет
...
Рейтинг: 0 / 0
31.03.2004, 12:45
    #32463692
Old Nick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Люди, свершилось. Я сделал объектное ядро
Собираюсь в дальнейшем переписать на дотНет. И базу использовать Юкон
...
Рейтинг: 0 / 0
31.03.2004, 13:50
    #32463841
AAron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Люди, свершилось. Я сделал объектное ядро
А нигде не было написано, что данне реляционные. Скорее можно было бы ожидать объектные данные (ведь происходит сохранение объектов). Кроме того, если один из атрибутов объекта представляет собой объект, его тоже нужно сохранять как объект. Ну и т.д.
...
Рейтинг: 0 / 0
31.03.2004, 14:14
    #32463920
Old Nick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Люди, свершилось. Я сделал объектное ядро
База нужна ведь не только для того чтобы хранить объекты. Хранить их естественно гораздо удобнее в объектной базе, но вот обрабатывать списки данных эффективно можно только в реляционной, поэтому в базе у меня все реляционно, а на клиенте объектно. Самая эффективная связка.

Может конечно разработчику и не очень легко будет в этом разбираться, но пусть тогда, те кто этого не может, катяться куда подальше. :-)
...
Рейтинг: 0 / 0
01.04.2004, 09:56
    #32464928
Quark
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Люди, свершилось. Я сделал объектное ядро
автор но пусть тогда, те кто этого не может
А потом рождаются такие фразы "А CBoss его знает".
...
Рейтинг: 0 / 0
01.04.2004, 17:56
    #32466020
1024
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Люди, свершилось. Я сделал объектное ядро
Советую воспользоваться поиском по форуму. Ключевое слово "междумордие". Там есть куча мнений по подобному вопросу.
...
Рейтинг: 0 / 0
01.04.2004, 20:12
    #32466196
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Люди, свершилось. Я сделал объектное ядро
to Old Nick
Такое ощущение, что каждый день по нескольку таких систем пишется :-)
Просмотров много, а ответов всего два.
___________________________
Чтобы паства возрадовалась, нужно чтобы каждый что-то с этого поимел.

Так что:

Постановка задачи - идея,
план работ - конкретика,
прототип - описание,
полученные результаты - сравнение с существующими решениями
...
Рейтинг: 0 / 0
01.04.2004, 20:58
    #32466208
Люди, свершилось. Я сделал объектное ядро
Что оно хоть делает-то, это объектное ядро? Ежели станете объяснять, то пожалуйста, по-простому, на пальцах. Что здесь объект (они ведь тоже разные бывают), куда мы хотим его засунуть, как это делается (только не надо названий методов и переменных... все равно здесь это никто не поймет) ну и тд, и тп.
...
Рейтинг: 0 / 0
02.04.2004, 12:29
    #32466937
Old Nick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Люди, свершилось. Я сделал объектное ядро
Попробую немного описать:

Есть метод 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, нажав кнопку создать и выбрав класс. Или редактировать, щелкнув правой кнопкой на объекте в эксплорере (Это спец форма для списка объектов)
...
Рейтинг: 0 / 0
02.04.2004, 13:19
    #32467048
Old Nick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Люди, свершилось. Я сделал объектное ядро
guest

Постановка задачи - идея,

минимизировать разработку приложений и исключить ошибки.

план работ - конкретика,
прототип - описание,
полученные результаты - сравнение с существующими решениями

Существующие решения либо имеют ограничения по функционалу (1С)
либо низкую скорость работы (1С:)

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

Также нет ограничений по интерфейсу. Пишите формы какие хотите, наследуйте только от BaseForm или от форм базовых классов

задача программиста регистрировать новые сущности и новые формы, не заботясь о том как они вызываются, как к ним идет обращение. Этим занимается ядро
...
Рейтинг: 0 / 0
02.04.2004, 15:52
    #32467322
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Люди, свершилось. Я сделал объектное ядро
Я так понял:

Объект:
Данные хранятся на сервере в базе (создаем руками),
Методы на сервере в ХП (создаем руками),

Создаем руками программный объект, который как-то связан с конкретными ХП.

далее при обращении к методам объекта вызываются ХП этого объекта.
...
Рейтинг: 0 / 0
02.04.2004, 16:00
    #32467338
Old Nick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Люди, свершилось. Я сделал объектное ядро
Guest Я так понял:

Объект:
Данные хранятся на сервере в базе (создаем руками),
Методы на сервере в ХП (создаем руками),

Создаем руками программный объект, который как-то связан с конкретными ХП.

далее при обращении к методам объекта вызываются ХП этого объекта.

Почти все правильно. На клиенте объект создавать не надо. Компонент по указанному классу полностью инкапсулирует в себе все данные сервера для заданного класса и идентификатора объекта.

Можно провести аналогию с компонентом, например, TADOTable. Указываешь TableName и все поля вытаскиваются. Мой компонент отличается от TADOTable также как Class отличается от record (struct) (добавилось наследование и методы)
...
Рейтинг: 0 / 0
02.04.2004, 16:11
    #32467360
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Люди, свершилось. Я сделал объектное ядро
Если не в лм, посмотрите типизированные таблицы и их методы
в DB2 или ORACLE. Похоже это уже сделано более качественно.
...
Рейтинг: 0 / 0
02.04.2004, 16:39
    #32467437
Old Nick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Люди, свершилось. Я сделал объектное ядро
Там наследования нет. Я уже давно все проштудировал
...
Рейтинг: 0 / 0
02.04.2004, 17:12
    #32467508
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Люди, свершилось. Я сделал объектное ядро
наследования или полиморфизма?
...
Рейтинг: 0 / 0
02.04.2004, 17:14
    #32467518
Old Nick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Люди, свершилось. Я сделал объектное ядро
да ни того, ни другого толком нет. В Оракле например, если создать тип объект унаследованный, то создать таблицу по нему нельзя. Как это называется. Нахрена тогда наследование? Уж лучше на джаве тогда писать
...
Рейтинг: 0 / 0
02.04.2004, 18:39
    #32467674
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Люди, свершилось. Я сделал объектное ядро
Я сам толком в этом не разбирался, но проде все эти объектные расширения работать должны. Что точно помню, так это в ДБ2 нельзя методы объектов перегружать...
Да и пока что небыло необходимости заниматься объектной моделью. Реляционная вполне устраивала.
...
Рейтинг: 0 / 0
02.04.2004, 19:06
    #32467712
Old Nick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Люди, свершилось. Я сделал объектное ядро
Меня реляционная модель тоже вполне устраивает. Главное в программировании вообще и в БД и ООП - это нормализация данных. Если каждая сущность лежит в своей таблице или классе то все очень легко решается. Но реляционной модели не хватает наследования, хотя его можно легко держать в голове. Но для этого нужно быть опытным программистом.

Моей целью было избавить прикладного разработчика от реализации связей. Любой хорошо знающий ООП, сможет быстро разобраться в моей системе и быстро начать решать прикладные задачи, причем любые. Сейчас пишу производство. Хотелось бы описать систему очень подробно, но не люблю я это писать.
...
Рейтинг: 0 / 0
02.04.2004, 21:28
    #32467798
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Люди, свершилось. Я сделал объектное ядро
Хотелось бы описать систему очень подробно, но не люблю я это писать.
_____________________________
Ну а посмотреть (пощупать) на это объектное ядро как нибудь можно?
...
Рейтинг: 0 / 0
02.04.2004, 22:25
    #32467816
Old Nick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Люди, свершилось. Я сделал объектное ядро
Guest

Где живешь? Если в СПБ, то нет проблем
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Люди, свершилось. Я сделал объектное ядро / 25 сообщений из 105, страница 1 из 5
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]