Форум: "Потрепаться";
Текущий архив: 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.033 c