![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
shootnix |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 3.9.2005 Где: Казахстан Репутация: 2 Всего: 2 |
Всем привет!
Вот тут у меня, наконец, созрел такой весьма философский топик, состоящий из ряда вопросов, посвященных работе с MySQL. Конкретно интересует: 1. Насколько оправдан, прочен и незыблем (сказал-то как!) такой вариант организации работы: Есть класс, который работает с базой. У него есть конструктор, который создает соединение и записывает этот $dbh в отдельное свойство экземпляра. Примерно так:
После этого я в основном скрипте вот так создаю экземпляр класса:
И после этого уже работаю с его методами:
Методы, естессно, просто пользуют свойсво объекта $self->{DBH}, т.е. ссылку на подключение. И уже в деструкторе класса я проделываю дисконнект и прочие радости... Мучит такой вопрос: насколько такая схема будет работать стабильно, не может ли тут скрываться какой-то подводный камешек нехилого азмера? Я просто всех тонкостей работы с БД не знаю, но ж...ой чую подвох ;-))) И второй вопрос: 2. Проистекает из первого — каким образом у себя на домашней тачке можно провести грамотный краш-тест для таких вот скриптов, чтобы узнать, насколько все же я неправ? И третий, в дополнение: При создании в основном скрипте $dbh возможно ли передавать этот объект другим модулям для их работы? К примеру, модуль, который что-то там делает, используя базу данных:
В этом случае не произойдет повторного соединения с базой? Если нет, то почему? Заранее спосибо. Жду ответа, как соловей лета ;-)) |
||||||||
|
|||||||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
Вы передаете в функцию дескриптор уже установленного подключения, так почему оно должно происходить? По 1ому: ну тут имхо только практика покажет... -------------------- Died at Life.pl line 21 |
|||
|
||||
Ramirez |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 18.1.2005 Где: Moscow, ExUSSR Репутация: 4 Всего: 5 |
Описанный подход - логичен и широко применяется.
К онкретно в приведенном примере - камней быть не может. Камни могут быть в этих самых методах и в организации приложения вцелом. насчет краштеста, если это веб-приложение, то
http://httpd.apache.org/docs/2.0/programs/ab.html на мой взгляд вполне достаточно.... |
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
Поддерживаю оба ответа!
|
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Уважаемый shootnix, из личного опыта скажу, что создавать соединение внутри объекта, да еще в конструкторе - вариант не очень удачный. Несомненно, работать будет, но интерфейс класса получается не совсем прозраным, да и вывод сообщений об ошибках и exit() внутри класса - это экстрим
![]() Более грамотным решением будет передача уже созданного в основной программе соединения (лучше двух) в конструктор объекта. Два соединения (одно для запросов на чтение данных, другое - для записи) необходимо для корректной работы с несколькими реплицирующимися БД, когда чтение идет со slave'ов, а записываются данные на master. В случае, если у Вас нет пока такой схемы передавайте в оба параметра один и тот-же $dbh.
Это сообщение отредактировал(а) ginnie - 25.1.2008, 11:41 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
shootnix |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 3.9.2005 Где: Казахстан Репутация: 2 Всего: 2 |
ginnie, спасибо, учту...
Собсна, ошибка внутри класса выводится, куда они денется-то? ![]() ![]() |
|||
|
||||
shootnix |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 3.9.2005 Где: Казахстан Репутация: 2 Всего: 2 |
Ну так или иначе, вроде все понятно, спасибо всем. Обнадежили
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |