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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обертки под СУБД, немного холивара 
:(
    Опции темы
MoLeX
  Дата 7.6.2011, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Добрый день.

При разрабатывание проектов с использованием СУБД часто встает вопрос об быстром развертывание проекта на новую СУБД или драйвер (например: миграция с mysql на mysqli, или замена mysql на sqlite) без изменения основного кода. В этом нам помогают обертки, причем они довольно громоздкие:
Код

// Пример 1
function db_connect($server, $user, $passw)
{
    return mysql_connect($server, $user, $passw);    
}
..........
function db_query($sql)
{
    return mysql_query($sql);
}

// Пример 2
class DB {
    
    function connect($server, $user, $passw)
    {
        return mysql_connect($server, $user, $passw);    
    }
    ....
    function query($sql)
    {
        return mysql_query($sql);
    }
}


Что очень не удобно - тонны строк. В итоге мне это надоело использовать и решил искать альтернативу, и вроде нашел её
Код

class DB 
{
    var $driver;
    
    function __construct($driver)
    {
        $this->driver = $driver.'_';
    }
    
    function __call($func = '', $arg = '')
    {
        call_user_func_array($this->driver.$func, $arg);
    }
}

$db = new DB('mysql'); // mysqli
$link = $db->connect('127.0.0.1', 'root', 'passw');
$db->select_db('database', $link);


Что скажите?

Добавлено @ 12:50
P.S. данное решение не означает что его нужно использовать сломя голову. Тем более тесты не проведены и не понятно стоит ли такое использовать. Все чисто теоретически пока что  smile 

Это сообщение отредактировал(а) MoLeX - 7.6.2011, 13:04


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
solenko
Дата 7.6.2011, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 34
Всего: 67



Я так и не могу понять боязни еще пары сотен строк в проекте. А ведь все что вы получаете это экономия LOC.

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




--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
MoLeX
Дата 7.6.2011, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Цитата(solenko @  7.6.2011,  13:04 Найти цитируемый пост)
вспомогательных задач типа логгирования и профилирования.

Да, этого в данном способе нету. Только если расширять/добавлять новый метод query()

Добавлено через 47 секунд
Цитата(solenko @  7.6.2011,  13:04 Найти цитируемый пост)
Я так и не могу понять боязни еще пары сотен строк в проекте. А ведь все что вы получаете это экономия LOC.

это не боязнь, это безделье которое рождает подобные вещи)


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Sanchezzz
Дата 7.6.2011, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 41
Всего: 60



я делал както проект полностью на mysqli но потом бац на хостинге нету mysql чтоже делать что же делать написал обертку простого mysql схожего на mysqli и не переписывал сотни кода ). 


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
solenko
Дата 8.6.2011, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 34
Всего: 67



Цитата(Sanchezzz @  7.6.2011,  21:29 Найти цитируемый пост)
я делал както проект полностью на mysqli но потом бац на хостинге нету mysql чтоже делать что же делать написал обертку простого mysql схожего на mysqli и не переписывал сотни кода ).  

А некоторые вообще ORM используют )  
// а то чет холивара то и не получается... 


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
MoLeX
Дата 8.6.2011, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Цитата(solenko @  8.6.2011,  09:40 Найти цитируемый пост)
а то чет холивара то и не получается... 

есть такое)


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Sanchezzz
Дата 8.6.2011, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 41
Всего: 60



не ORM меня не когда не вдохновляло а вот обертка самое то причем я на столько люблю mysqli что везде его использую )


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
solenko
Дата 8.6.2011, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 34
Всего: 67



Цитата(Sanchezzz @  8.6.2011,  15:07 Найти цитируемый пост)
не ORM меня не когда не вдохновляло а вот обертка самое то причем я на столько люблю mysqli что везде его использую ) 


И что, потом, при обновлении данных рыскать по коду и переписывать все запросы?


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
Valinur
Дата 8.6.2011, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А чем PDO не устроил?
--------------------
Не бойтесь совершенства, Вы все равно его не достигнете (с) ...
PM MAIL   Вверх
solenko
Дата 9.6.2011, 07:52 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 34
Всего: 67



Цитата(Valinur @  8.6.2011,  21:36 Найти цитируемый пост)
А чем PDO не устроил?

ну, например, округлением float до не помню какого знака после запятой при бинде параметров. 


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
Sanchezzz
Дата 9.6.2011, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 41
Всего: 60



Цитата

И что, потом, при обновлении данных рыскать по коду и переписывать все запросы? 

Ну да надо же себя чем то занять  smile 



--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Sentox
Дата 10.6.2011, 01:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


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

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



Цитата(solenko @ 9.6.2011,  07:52)
Цитата(Valinur @  8.6.2011,  21:36 Найти цитируемый пост)
А чем PDO не устроил?

ну, например, округлением float до не помню какого знака после запятой при бинде параметров.

а если перегрузить метод из PDO?
PM MAIL   Вверх
eLRiz
  Дата 10.6.2011, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нет холивара? Пожалуйста:

Вы что так часто меняете СУБД? Каждый день переезжаете с сервера на сервер?
1) Если у Вас свой сервер, то поставить нужную СУБД не будет ни каких проблем.
2) Если у Вас хостинг и он не предоставляет популярные SQLite или MySQL, то этот хостинг попросту не нужен.

Я просто замечаю, что кое-кому делать нефиг, начинает писать много лишнего в проект. Раз пишите под несколько СУБД, сразу на разных языках пишите, вдруг на хостинге нет PHP, но есть Python или Ruby

 smile 
PM WWW   Вверх
MoLeX
Дата 10.6.2011, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Цитата(eLRiz @  10.6.2011,  08:06 Найти цитируемый пост)
Вы что так часто меняете СУБД? Каждый день переезжаете с сервера на сервер?

часто работаю с заказами, в которых заказчики сразу говорят - "мне mysql, mysqli, sqlite, etc". А ядро используется одно и то же.

Добавлено через 1 минуту и 1 секунду
Цитата(eLRiz @  10.6.2011,  08:06 Найти цитируемый пост)
Раз пишите под несколько СУБД, сразу на разных языках пишите, вдруг на хостинге нет PHP, но есть Python или Ruby

Надо SamDark'у сказать, пусть Yii переводят на эти языки


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
eLRiz
  Дата 10.6.2011, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

часто работаю с заказами, в которых заказчики сразу говорят - "мне mysql, mysqli, sqlite, etc". А ядро используется одно и то же.


Всё равно не понимаю, зачем в одном проекте сразу всё? В разных проектах, может и нужно.
Не разу не пришлось использовать что-то отличное от MySQL. А если нравится объектный подход, то лучше использовать тогда объектно-реляционную организацию данных. Читаем: http://forum.wen.ru/?p=3&f=6&t=396249 может найдете для себя что-то  smile 
PM WWW   Вверх
Absinthe
Дата 10.6.2011, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 5
Всего: 11



Цитата

Что скажите?
 СкажЕте.
Скажу, что полностью бессмысленно: получим в итоге то же самое, только уродливое.  При этом с полным отсутствием ООП, а его умеют даже стандартные классы.

Эти обертки вводятся для удобства и для унификации. Тут же нет ни того, ни другого, более того все даже гораздо хуже банального класса mysqli в плане удобства и проектирования(объект даже в примере выше линк внутри себя не сохранил).

Чтобы исправить:
1) Хранить в себе служебные данные, пользователю они как пятая нога на зеркале.
2) Унифицировать методы(чтобы работа с мускулом не отличалась от sqlite).
3) Добавить методы типа fetchAll, fetchRow, fetchOne, fetchPairs, fetchCol, insert, update, delete.
4) После написания всего этого спросить себя: "Нахрена я это писал и тратил время, если мог просто взять качественную готовую обложку. Наверное мне надо лечиться от мании величия и не считать чужой качественный оттестированный тысячами разработчиков документированный проверенный временем код заведомо хуже своего, написанного за день на коленке.". После чего стереть проект и воспользоваться аналогичным(но более качественным) решением.
PM MAIL   Вверх
Sentox
Дата 11.6.2011, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


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

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



Цитата(eLRiz @ 10.6.2011,  09:45)
Цитата

часто работаю с заказами, в которых заказчики сразу говорят - "мне mysql, mysqli, sqlite, etc". А ядро используется одно и то же.


Всё равно не понимаю, зачем в одном проекте сразу всё? В разных проектах, может и нужно.
Не разу не пришлось использовать что-то отличное от MySQL. А если нравится объектный подход, то лучше использовать тогда объектно-реляционную организацию данных. Читаем: http://forum.wen.ru/?p=3&f=6&t=396249 может найдете для себя что-то  smile

Использование единого ядра к разным хранением данных (и не только) называется портируемостью системы, одно из мощных свойств ООП в целом. Данные при этом могут браться из нескольких  распределённых серверов БД с разными СУБД, или вообще файловых серверов данных.
ORM не всегда лучше в использовании, так как от проекта к проекту (в плане от автора к автору) имеет специфический функционал, к которому:
    Надо дополнительно изучать специфику работы с моделью особенно при составлении сложных и взаимосвязанных запросах,где каждый по разному эту специфику реализовывает
    Имеет целесообразность только в определённом кругу разработчиков, а так же в продолжительном проекте (например фреймворке)
    И так сказать "религия" разработчика, то есть ну не к чему многим усложнения в виде ORM которая накладывает дополнительные проблемы реализации, по сравнению скажем с PDO или приблизительно с такой же обёрткой.


Это сообщение отредактировал(а) Sentox - 11.6.2011, 09:10
PM MAIL   Вверх
Sentox
Дата 11.6.2011, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


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

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



Цитата(Absinthe @ 10.6.2011,  10:00)
4) После написания всего этого спросить себя: "Нахрена я это писал и тратил время, если мог просто взять качественную готовую обложку. Наверное мне надо лечиться от мании величия и не считать чужой качественный оттестированный тысячами разработчиков документированный проверенный временем код заведомо хуже своего, написанного за день на коленке.". После чего стереть проект и воспользоваться аналогичным(но более качественным) решением.

5) Меня попросили продать продукт, содержащий лицензионное PDO  и тогда, на хрена я выкинул свою обёртку ...  smile 
PM MAIL   Вверх
Sanchezzz
Дата 11.6.2011, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 41
Всего: 60




1 не потребует деньги если ты пишешь коммерческий продукт
2 это ведь так интересно написать что то лишние и бесполезное =) 



--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0976 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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