Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> интерфейс класса для базы данных 
:(
    Опции темы
NewDima
Дата 14.8.2009, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



Какие требования у вас к интерфейсу класса, работающего с базой данных? На сколько для вас удобно широкое абстрагирование от запросов? Интересно узнать, что вас более всего привлекает в работе с базой данных через класс-оболочку?
PM ICQ   Вверх
Ипатьев
Дата 14.8.2009, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Что имеется в виду под "абстрагированием от запросов"? ORM?
PM MAIL   Вверх
NewDima
Дата 14.8.2009, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



Я видел, как некоторые пишут класс с малым количеством методов, довольствуются методом query, в который передают строку запроса и парой методов получения данных, вернутых сервером. Если посмотреть иходники joomla, то видно что они на много шире абстрагируются от запросов к базе данных, например отдельно ставят limit и offset и так далее...
надеюсь, доступно))
PM ICQ   Вверх
ruX
Дата 14.8.2009, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 8.9.2006
Где: г.Гатчина

Репутация: 1
Всего: 3



Нравиться CodeIgniter'овский activeRecord, простые запросы можно написать в очень наглядном виде, и быть уверенным в том что точно всё заэкранированно.
Как только запрос становиться более громадный, приходиться руками писать. Опять же используя placeholder'ы. Это хорошее правило которое гарантирует что не допустишь иньекции.

Хотя сейчас понимаю что от activeRecord стоило вообще отказаться - лучше использовать mysqli, имхо.

Добавлено через 1 минуту и 36 секунд
думаю, что больше пишу руками потому что не сталкивался с переносом на другой язык sql
--------------------
Случайность - внезапно наступившая неизбежность.
PM MAIL WWW ICQ   Вверх
Ипатьев
Дата 14.8.2009, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Это не абстрагирование, это конструктор. Смысла в нем лично я не вижу. Обычно при его создании руководствуются туманными представлениями о прекрасном будущем и соображениями экономии кода. В итоге получается сильно наоборот. 
Абстрагирование - это, скорее, ORM.

PM MAIL   Вверх
NewDima
Дата 14.8.2009, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



Ипатьев, да, возможно я выбрал не то слово, но все-таки?
PM ICQ   Вверх
IZ@TOP
Дата 14.8.2009, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Для формирования запросов к базе я использую в своих проектах три подхода:
1. Конструктор запросов. Легкий, для простейших выборок. Грубо говоря, выглядит вроде:
Код

$result = $NameModel->getQueryConstructor()
  ->filter('category_id', $category_id)
  ->limit($offset, $limit)
  ->find();


2. Подготовку (prepare) запросов с плейсхолдерами. В основном для UPDATE/DELETE/INSERT. Пример:
Код

// в контексте модели $NameModel (как пример)
$this->prepare("UPDATE `" . $this->table . "` SET `status` = i:status WHERE `category_id` = i:category_id")
   ->exec(array('status' => $status, 'category_id' => $category_id));

3. Громоздкие запросы пишу руками.

Противникам конструкторов могу сказать, что я не фанат этой идеологии, но порой так гораздо удобнее. Особенно, когда речь идет о добавлении фильтров в произвольном порядке на определенных условиях (пользователем, к примеру). Тем более, что в своей модели я всегда закладываю анализатор и бенчмарк запросов, который при девелоперской разработке можно посмотреть и поправить при необходимости.

Добавлено через 3 минуты и 8 секунд
Вообще, помимо работы с формированием SQL'я, используется множество подходов при работе с результатом выборки. Я использую обертку для каждого типа выборки, которая предоставляет необходимый интерфейс для работы с данными в моем приложении.



--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
rMaveric
Дата 14.8.2009, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 18.7.2003

Репутация: 3
Всего: 6



Устраивают самописный конструктор + для сложных запросов рукаими. юзаю mysqli

Была необходимость переноса проекта на MSSQL решилось заменой файла запросов к БД переписанную для новой реализации.


--------------------
Моя благодарность не будет иметь границ. в определенных рамках конечно ;)
---
Веду IT блог
PM MAIL WWW ICQ   Вверх
NewDima
Дата 15.8.2009, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



rMaveric, если не сложно, какой интерфейс предоставляет ваш самописный конструктор?
IZ@TOP, поскольку с конструкторами запросов я никогда не сталкивался, не могли бы вы чуток подробнее рассказать о них, как используются, как примерно работают?
PM ICQ   Вверх
nerezus
Дата 15.8.2009, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



Цитата

Какие требования у вас к интерфейсу класса, работающего с базой данных?
 Zend_Db.

До использования сабжа юзал самопальный, так вот даже названия методов и их использование совпали. Из этого я понял, что мой код очень даже на уровне))
Так вот я перешел на Zernd_Db: много драйверов для разных СУБД, отличная документация, качественный код, поддержка. И очень активнор развивается.

Поэтому писать что-то свое, когда есть Zend_Db...

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

По поводу ORM, то простые вещии мне проще сделать на недоорм(своя реализация на ZF), а сложные SQL-запросами.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
IZ@TOP
Дата 16.8.2009, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Цитата(nerezus @  15.8.2009,  17:35 Найти цитируемый пост)
Поэтому писать что-то свое, когда есть Zend_Db...


Не могу не согласиться. Если ты не знаешь за что взяться и как писать - используй то, что предлагают тебе создатели языка.

Как работают конструкторы рассказывать бессмысленно, это понятно из названия. Используя ООП подход вы просто задаете какие части запроса и как должны быть составлены, далее конструктор просто собирает все данные в исходный SQL и выполняет.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0502 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.