ORM?
Добавлено: 24.01.2011 14:40:41
Почти все объекты имеют отражение в БД - при старте приложения они выгружаются, в процессе работы изменяются и сохраняются. Примерный общий вид типового класса:
Все таблицы имеют сходную структуру, повторяющую поля класса.
Крайне надоело писать один и тот же код. Хочется:
- Код: Выделить всё
Type
{ TMyObject }
TMyObject = Class
Private
fID: Integer;
fOptions: TList;
fSomeField1: String;
fSomeField2: String;
Public
Property ID: Integer Read fID;
Property SomeField1: String Read fSomeField1 Write fSomeField1;
Property SomeField2: String Read fSomeField2 Write fSomeField2;
Property Options: TList Read fOptions;
Procedure Save;
Constructor Create(Const aID: Integer);
Constructor Create(Const aID: Integer;
Const aSomeField1, aSomeField2: String);
Destructor Destroy;
End;
...
Procedure TMyObject.Save;
Var
i: Integer;
aSQL: TSQLClass; // мой обработчик параметризированных запросов
Begin
if ID = -1 Then
aSQL := TSQLClass.Build('INSERT INTO TMYOBJECTS VALUES(' +
'GEN_ID(GEN_TMYOBJECTS_ID, 1), :SOMEFIELD1, :SOMEFIELD2) ' +
'RETURNING ID')
Else
Begin
aSQL := TSQLClass.Build('UPDATE OR INSERT INTO TMYOBJECTS VALUES(' +
':ID, :SOMEFIELD_1, :SOMEFIELD2)');
aSQL.AddParam('ID', ID);
End;
aSQL.AddParam('SOMEFIELD1', SomeField1);
aSQL.AddParam('SOMEFIELD2', SomeField2);
With TQueryClass.Create Do // второй уменьшатель кода для работы с БД
Begin
Post(aSQL);
aSQL.Free;
If ID = -1 Then fID := Integer('ID');
Post('DELETE FROM TMYOBJECTS_OPTIONS WHERE TMYOBJECT = ' +
IntToStr(ID));
// Удаляю всю информацию о свойствах и записываю актуальными сведениями, т.к.
// на данный момент не ведётся учёт изменений Options (да и Properties тоже)
aSQL := BSQLClass.Build('INSERT INTO TMYOBJECTS_OPTIONS VALUES(' +
':ID, :OPTION_ID)');
aSQL.AddParam('ID', ID);
For i := 0 To Options.Count - 1 Do
Begin
aSQL.SetParam('OPTION_ID', TMyOption(Options[i]).ID);
Post(aSQL);
End;
Go;
Free;
End;
End;
Все таблицы имеют сходную структуру, повторяющую поля класса.
Крайне надоело писать один и тот же код. Хочется:
- иметь инструмент для создания таблиц в базе по описанию класса (а так же изменению их при изменении класса)
- чтобы объект запоминал, какие поля у него меняются и при вызове Save сохранял только их. Это же относится и к Options
- всё выполнялось автоматически с минимумом ручного кода (самое главное ^_^)