![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| supercelt |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 658 Регистрация: 25.8.2005 Репутация: нет Всего: 1 |
Вот давно хотел узнать. Зачем пишут свои функции, если есть стандартные. Особенно касается БД?
Например надо вывести из базы данные, можно же ведб просто везде писать
Зачем делают вот так???
Ведь это требует больше ресурсов, мало того вызывается своя функция, так ещё и стандартная. Зачем это вообще нужно? |
||||
|
|||||
| source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 2 Всего: 56 |
Для повышения уровня абстракции...
Читать скрипты, использующие стандартные функции для работы с БД напрямую - очень грустное занятие, ибо куча кода, который повторяется из раза в раз, забивая на DRY-принцип... К тому же если тебе приспичит поменять СУБД, то достаточно будет переписать единственный класс для работы с БД, а не все скрипты... В наше время нервы программистов уже ценятся гораздо выше, чем вычислительные ресурсы, да и не так уж много ресурсов нужно на вызов функции переходника, как тебе кажется... А если будешь продолжать делать по-своему, то потом будешь делать так: -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
| GeneralElectric |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
это неправда. различные СУБД различаются не функциями API, а диалектами языка. поэтому смной класса дело не ограничится. В общем - не довод.
Это неправда. Скрипты читаются прекрасно, на автомате. Это примерно как английский язык - худо-бедно все его понимают, слова "йес" и "ноу" знают все, и понимают без перевода. С собственными функциями приходится переводить. В общем, на чтение сильного влияния не оказывают. Добавлено через 12 минут и 35 секунд supercelt, я тебе объясню волшебное правило, с помощью которого легко определять, нуже функция, или нет. В функцию следует заключать часто используемый фрагмент кода. Рассмотрим твой вопрос с этой точки зрения. Для работы с бд переопреденяют не одну функцию, а несколько. к примеру, чтобы получить одну строку из БД, надо в самом минимальном случае выполнить две функции - mysql_query и mysql_fetch_array. Если же делать по-человечески, то надо а) присвоить переменной значение запроса а не писать его прямиком в функции б) выполнить запрос в) проверить - успешно ли г) если неуспешно, то обработать ошибку, используя переменную из пункта "а" и mysql_error() д) получить массив. Уже 5 пунктов. вполне достойно помещения в функцию, согласись? учитывая же, что функционал функции для работы с БД мы можем захотеть расширить, к примеру, вместо
что значительно сократит объем кода. Сюда же можно дописать функционал по замеру времени выполнения запроса, что очень пригодится потом при профилировании. То есть, если с умом объединять несколько встроенных функций в одну сосбтвенную, то это имеет смысл, и большой. А без ума просто дублировать каждую, как в приведенном тобой чьем-то примере (подозреваю - недоучки Курепина) - то смысла, разумеется, нет. |
||||||||
|
|||||||||
| source777 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 2 Всего: 56 |
Свои фунции - это как термины, один раз прочитал глоссарий и потом приходится читать, да и писать в 5 раз меньше... Ибо не надо лицезреть многократную расшифровку одних и тех же терминов... Да и кстати, дочитывай чужие предложения до конца, прежде чем цитировать их часть, а дальше расписывать смысл невошедшей в цитату части предложения своими словами для тех кто в танке... Это сообщение отредактировал(а) source777 - 17.2.2008, 16:03 -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
||||
|
|||||
| flashaa |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 19 Всего: 25 |
Cогласен с утверждением GeneralElectric, которое он впоследствии написал. В ф-ции выносят много повторяющегося кода. Если для примера брать именно работу с базами, то здесь это все как раз очень хорошо просматривается. Работа с бд имеет много однотипных, часто повторяющихся задач, которые не входят в обязанности стандартных функций, а прописывать их каждый раз - не эффективно. Выборка из бд может быть направлена на получение разных результатов (массив, столбец, значение), к тому же при работе с запросами есть такие вещи как плейсхолдеры - спец. символы в запросе, которые должны быть заменены на соответствующее значение с возможной предварительной обработкой.
пример плейсхолдера
Так же в запросах могут быть условные блоки, которые могут быть оставлены в запросе, либо убраны. Возможно, мы захотим кешировать результаты запроса, либо сделать что-то ещё. Весь этот функционал в хороших проектах не такой уж редкий, а точнее используется на каждом шагу. Вот, чтобы не утонуть в mysql_result и им подобным, переходят к более сложному коду, который выносят в ф-ции, библиотеки, классы. Да, это переход к более высокому уровню абстракции. Здесь может быть как абстракции баз данных (возможность работы одинаковыми методами с разными движками бд), так и абстракция уровня программирования (возможность перейти от ручной обработки строк и ручного разбора переменной-результата к таким понятиям, как получение выборки ) source777, чтобы можно было легко и безболезненно сменить движок бд, уровень абстракции библиотеки соответственно должен быть таким, чтобы пользователь НЕ имел дело с запросами. В библиотеках, где запросы все-таки приходится вводить, разумеется и эти запросы так же придется править. Это сообщение отредактировал(а) flashaa - 17.2.2008, 20:54 |
|||
|
||||
| source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 2 Всего: 56 |
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |