Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.26;
Скачать: CL | DM;

Вниз

Унифицированый набор классов для доступа к БД   Найти похожие ветки 

 
by ©   (2004-09-06 16:59) [0]

Есть у нас несколько разных СУБД, есть компоненты доступа к ним, IBX или FIBPlus для Firebird, ADO для MSSQL, Halcyon для dbf и так далее. Есть приложение которое желает работать со всеми этими БД. При этом не подразумевается что нужно перенести одни таблицы на разные платформы, просто нужно в форме списка к гриду подсоединять разные источники для просмотра, отбора, сортировки и т.д. Соответственно нужно свести все методы доступа к БД в один общий класс или группу класов. Начитавшись Паттернов проектирования возникает мысль что это все укладывается в паттерн Абстрактная фабрика, которая производит продукты типа - TMyDatabase, TMyDataSource, TMyDataSet и пр. при этом за вызовом TMyDataSet.Sort() стоят вызовы Конкретной фабрики которая сейчас подключена (IBXFactory, ADOFactory...) и соответственно, её конкретные методы.
Если все это сделать, то мы можем делать, например, TMyDataSet.Post не задумываясь как это выполняет конкретная библиотека доступа.
Кто нибудь пробовал такое реализовать? Есть какие-то конкретные идеи или ссылки на подобное?


 
Ega23 ©   (2004-09-06 17:06) [1]

Э-э-э...  А разве все они не являются потомками абстрактного TDataSet?


 
stone ©   (2004-09-06 17:09) [2]


> by ©   (06.09.04 16:59)  

типа такого?
http://web.avtosklad.info/psites/ovainsh/projects.htm


 
by ©   (2004-09-06 17:16) [3]

> Ega23 ©   (06.09.04 17:06)
Э-э-э...  А разве все они не являются потомками абстрактного TDataSet?


Да, все наследники, но, например, у FIBPlus есть метод Sort для сортировки, а у IBX это нужно делать ререз создание индексов. А метов TMyDataSet.MySort вызывался одинаково везьде, только вннтренняя реализация у каждой фабрики разная.

> stone ©   (06.09.04 17:09)

может и такое.

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


 
stone ©   (2004-09-06 17:21) [4]


> by ©   (06.09.04 17:16) [3]

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


 
Ega23 ©   (2004-09-06 17:22) [5]

Вообще-то я предпочитаю сорт в SQL-запросе делать. Точнее, Order By. А в остальном всё достаточно универсально. ИМХО, конечно.


 
by ©   (2004-09-06 17:39) [6]

Sort можно делать через Order By. Но то же сохранение у все по разному, для IBX это Post Commit, для ClientDataset это ApplyUpdates, т.е. по разному. Я все больше склоняюсь к связке ЛюбойDataset -> DataSetProvider -> TClientDataset и работа потом только с ClientDataset.


 
Ega23 ©   (2004-09-06 17:42) [7]

by ©   (06.09.04 17:39) [6]

Хороший выбор. При эксклюзивном захвате таблицы даже универсален. Но, ИМХО, при многопользовательском доступе неприемлем.


 
by ©   (2004-09-06 17:45) [8]

А почему при многопользовательском доступе неприемлем ?
из-за конфликтов на обновление уже измененных данных или почему?


 
Ega23 ©   (2004-09-06 18:19) [9]

Ну, в общем, да. На одном клиенте закачали набор данных в CDS, на другом закачали. На одном изменили что-то, на другом что-то удалили. Чья правда? :о)


 
by ©   (2004-09-06 18:25) [10]

Ega23 ©   (06.09.04 18:19)

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



Страницы: 1 вся ветка

Текущий архив: 2004.09.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.059 c
3-1093518597
1g0r
2004-08-26 15:09
2004.09.26
список всех таблиц в SQLDataSet


1-1094718817
Sergei
2004-09-09 12:33
2004.09.26
Поиск в ресурсах


14-1094307399
ArMellon
2004-09-04 18:16
2004.09.26
Как отловить запимь на диск?


4-1092198053
DelphiN!
2004-08-11 08:20
2004.09.26
Как проверить зарегестрирован ли сервис в системе?


6-1090301549
Eagle
2004-07-20 09:32
2004.09.26
Socket PORT