Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Организация сохранения данных в БД 
:(
    Опции темы
WaReZMEN
Дата 5.8.2009, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



Есть у меня некий класс Назовем его TMyClass у него есть куча свойств.  Я хочу сохранить этот класс в БД. Но хочу сделать это по умному smile
То есть написать класс который будет все это делать в нем же сделать возможным сохранения в любую выбранную (естественно заранее писаную БД). Абы как я это могу написать но хочется дельного совета как это сделать грамотно с точки зрения ООП. Статьи или даже примеры будут очень кстати.  smile 
PM MAIL ICQ   Вверх
Romikgy
Дата 5.8.2009, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



имхо у класса есть еще и реализация , как с ней быть ?

а по теме видать надо ReadComponent, WriteComponent


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
WaReZMEN
Дата 5.8.2009, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



Romikgy, Наверное выразился не верно именно реализацию класса с его текущими значениями свойств и переменных... 
Причем я не спрашиваю как получить property это я и сам знаю... интересует именно правильная структура классов как это нужно делать чтоб все было красиво и при необходимости можно было не долго думаю добавить еще одну Бд в которую можно будет сохранять.
PM MAIL ICQ   Вверх
Romikgy
Дата 5.8.2009, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



не понял 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
WaReZMEN
Дата 5.8.2009, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



Romikgy, Есть класс у него есть своиства мы делаем энкземпяр класса и присваеваем его своиствам разные значения например

Код

TMyClass = class
private
   FName: String;
public
   property  Name : String read FNamewrite FName;
end;

....

var
   mY: TMyClass ;
begin
 My := TMyClass.Create;
My.Name := 'Тест'; 
end;



Потом я описываю класс (собственно который меня и интересует) в который я передаю My и какую БД я хочу сохранить например Oracle Или MS SQL 2005. Этом классе записывает в БД в определенную таблицу (скажем в этом классе есть их список для каждой БД) ну и сохраняется мое значение My то есть   в Бд появится запись в какой то конкретной таблице (соответствие есть в классе)  
ID |   NAME 
1   |  "ТЕСТ".

В принципе фонарными if else можно обойтись но я хочу грамотную расширяемую систему.
PM MAIL ICQ   Вверх
Romikgy
Дата 5.8.2009, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



на простом примере понятно 
Цитата(WaReZMEN @  5.8.2009,  10:58 Найти цитируемый пост)
я хочу грамотную расширяемую систему. 

что расширятся будет ?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
WaReZMEN
Дата 5.8.2009, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



Romikgy, Расширять будем количество БД в которые сохранять можно (хотя даже не тока БД) можно будет и в XML и текстовый файлы короче куда угодно ...
PM MAIL ICQ   Вверх
Romikgy
Дата 5.8.2009, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



не понятно какое отношение имеет кол-во БД к сохранению класса....


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
RockClimber
Дата 5.8.2009, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: нет
Всего: 15



WaReZMEN, я правильно понял, что сохранить этот класс в БД = сохранять в БД значения полей экземпляров класса?
И еще:
1. А если у класса есть свойства, которые тоже являются классами?
2. А если класс со временем изменится?

Есть интересная штука - модель EAV, которую как раз и создавали для описания нашего вечно меняющегося нестабильного мира. smile Но у этой модели тоже есть нюансы.
 
Цитата(WaReZMEN @  5.8.2009,  11:58 Найти цитируемый пост)
Потом я описываю класс (собственно который меня и интересует) в который я передаю My и какую БД я хочу сохранить например Oracle Или MS SQL 2005. Этом классе записывает в БД в определенную таблицу (скажем в этом классе есть их список для каждой БД) ну и сохраняется мое значение My то есть   в Бд появится запись в какой то конкретной таблице (соответствие есть в классе)

А тут RTTI пригодится...


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
WaReZMEN
Дата 5.8.2009, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



Romikgy, блин. Скажем так с начало мы сделали сохранение в БД Oracle потом захотели чтоб те же данные можно было сохранять в MS SQL потом захотели эти же данные сохранять в XML потом вообще захотели сохранять в txt. Кол-во баз изменилось (точнее не баз а мест хранения). Естественно что хранение не во всех местах сразу а выбирается при установке или настройки системы. к слову кол-во придираться не стоит ... Фактически в системе могут появляться новые места хранения в следствие чего их кол-во изменится это логично....
PM MAIL ICQ   Вверх
Frees
Дата 5.8.2009, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



можно сделать так

пишеш базовый(абстрактный) класс для сохранения данных 

в его потомках реализуеш функцию сохранения чтения 

Код

  TStoreData = class
  private
    procedure StoreProperty(PropName: string; PropValue: Variant);virtual;abstract;
  public
    procedure StoreData(Obj: TMyClass);
  end;
  TStoreDataOracl = class(TStoreData)
  private
    procedure StoreProperty(PropName: string; PropValue: Variant);override;
  public
  end;
  TStoreDataXML = class(TStoreData)
  private
    procedure StoreProperty(PropName: string; PropValue: Variant);override;
  public
  end;

implementation

{ TStoreData }

procedure TStoreData.StoreData(Obj: TForm);
var
  I: Integer;
begin
  for I := 0 to Obj.PropCount - 1 do
    StoreProperty(Obj.Prop[i].name, Obj.Prop[i].Value);
end;

{ TStoreDataOracl }


{ TStoreDataOracl }

procedure TStoreDataOracl.StoreProperty(PropName: string; PropValue: Variant);
begin
  inherited;
  // создать коннект
  //выполнить инсерт в бд
end;


{ TStoreDataXML }

procedure TStoreDataXML.StoreProperty(PropName: string; PropValue: Variant);
begin
  // создать файл xml
  //выполнить запись в файл
end;


Это сообщение отредактировал(а) Frees - 5.8.2009, 12:53


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
WaReZMEN
Дата 5.8.2009, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



Frees, ну вот что то подобное я и  имел виду... А есть реальные примеры статьй как это лучше сделать?
PM MAIL ICQ   Вверх
Frees
Дата 5.8.2009, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



Цитата(WaReZMEN @  5.8.2009,  15:54 Найти цитируемый пост)
А есть реальные примеры статьй как это лучше сделать?

подобное видел в примерах статей типа"принцыпы ООП"

Добавлено через 55 секунд
в DRKB статья "Краеугольные камни ООП" нечто подобное


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
WaReZMEN
Дата 5.8.2009, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



Frees, smile ну хоть не в гугл послал....

Добавлено через 4 минуты и 16 секунд
RockClimber, если класс изменится ясное дело надо переписывать и сохранение. если  свойства классы то естестве но лезим в глубь...
PM MAIL ICQ   Вверх
Romikgy
Дата 5.8.2009, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Цитата(Frees @  5.8.2009,  11:51 Найти цитируемый пост)
Prop

непонятное поле ....
Цитата(WaReZMEN @  5.8.2009,  11:49 Найти цитируемый пост)
Romikgy, блин. 


WaReZMEN, я не блин ...

зачем тогда делать динамику , если каждый раз будется переписыватся ф-ция сохранения в БД при изменении интерфейса класса....?
напиши 2 ф-ции у класса запомнить в БД и считать из БД 
и в них считывай и пиши все данные какие хочешь ....
это грубо говоря запоминание "статических" данных класса , а не реализации ... это проще ....


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0565 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.