Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Для профи > Хранение данныч в CMS


Автор: AztEK 1.4.2006, 16:28
Здравствуйте!
Я пишу CMS и сейчас делаю систему хранения даных.
Идеология такая: есть набор API функций, которые взаимодействуют с данными(БД, файлы, неважно).
И все компоненты системы(включая модули и проч) взаимодецствуют с данными ч/з эти функции.

Так вот, вопрос стоит в том, как реализовать это всё хотя бы например для файлов и MySQL.
У меня было несколько идей - в одних случаях получалось нерациональное использование БД (хранить сериализованную переменную в текстовом поле), в других - слишком сложно (эмулировать SQL для файлов).
Может кто-нибудь занимался таким вопросом и может что-нибудь посоветовать?




P.S. Не надо меня отговаривать от этой идеи.

Автор: BIG BROTHER 1.4.2006, 19:19
Это называется драйвера для баз - их можно найти великое множество.
Глянь ADO DB - это набор абстрактных классов, которые работают практически со всеми БД и упращает разработку и использование

Автор: AztEK 2.4.2006, 07:29
Понятно, что нужны драйверы. Я их тоже буду использовать.
Наверное вопрос неправильно сформулировал. Тогда вот так:
Как работу с БД и с файлами подогнать под единые API функции?

Автор: ZlojEzh 2.4.2006, 11:58
все зависит от внутренней структуры данных
если она не слишком сложна - вполне может подойти метод полной инкапсуляции объектами всех связей с дынными

для каждой сущности создаешь класс с функциями типа getChtoTo(), saveChtoTo(), findChtoToByToTo() и т.д.
а уж их реализуешь, как душе угодно

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

Автор: AztEK 2.4.2006, 12:24
Цитата
для каждой сущности создаешь класс с функциями типа getChtoTo(), saveChtoTo(), findChtoToByToTo() и т.д.
а уж их реализуешь, как душе угодно


Да, так себе это и представляю, даже начал что-то подобное писать.
Делал так: есть драйвера для MySQL и файлов и API-класс, который в частности управляет данными.
он имеет такие ф-ции (типа getChtoTo(), saveChtoTo(), findChtoToByToTo()), но я не знаю как их реализовать. Я не могу придумать такой структуры данных, чтобы её можно было нормально реализовать средстами БД (необязательно MySQL) и файлы. А соответсвенно и ф-ции управления ей.

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


О! А этот ход надо взять на вооружение! smile

Автор: AztEK 5.4.2006, 14:34
Вот что я придумал.
Инкапсулировать в одной функции обращение к БД и заносить её в многомерный массив.
А потом просто сделать удобные ф-ции для сортировки и выборки из массива.
Вопрос: насколько это будет производительно?
Ладно, если это конфигурация, а если БД пользователей с тысячами записями...

Автор: ZlojEzh 5.4.2006, 19:11
размер таблиц - это еще не самое критичное:
а если понадодится выбирать данные из нескольких таблиц?
на файлах кранты будет...
вывод - структуру данных продумывать надо таким образом, чтобы связи между таблицами были минимальными (возможно даже путем дублирования данных)


Автор: AztEK 6.4.2006, 12:23
Цитата
а если понадодится выбирать данные из нескольких таблиц?


Да, об этом я не подумал.
Хорошо, тогда так. Передавать функции в аргументе имя таблицы/файла. Возвращать она будет массив-содержимое.

Цитата
вывод - структуру данных продумывать надо таким образом, чтобы связи между таблицами были минимальными (возможно даже путем дублирования данных)


Связей как я понимаю вообще не будет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)