Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.043 c
1-1094735404
Still Swamp
2004-09-09 17:10
2004.09.26
RTF -> HTML и обратно.


1-1094820957
kand
2004-09-10 16:55
2004.09.26
как можна проверить, что файл создан сегодня?


1-1095086370
Lord de Mon
2004-09-13 18:39
2004.09.26
ShellExecute


4-1092652546
MetalFan
2004-08-16 14:35
2004.09.26
серийный номер CD/FD


3-1093844209
Drozdov A
2004-08-30 09:36
2004.09.26
Запрос SQL в Делфи





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский