Главная страница
    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.034 c
14-1094315260
olookin
2004-09-04 20:27
2004.09.26
Rammstein - Mein teil.


1-1094569071
Vadim Mazein
2004-09-07 18:57
2004.09.26
Измерение скорости выполнения программ


3-1093498750
Artem123
2004-08-26 09:39
2004.09.26
Как динамически добавить в ClientDataSet поле SmallInt чтобы....


4-1090500944
Alexis
2004-07-22 16:55
2004.09.26
Диалог SelectDirectory с кнопкой-опцией "Make new folder"...


3-1093597568
stud
2004-08-27 13:06
2004.09.26
при попытке выполнить запрос выскакивает сообщение





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский