![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
gcc |
|
||||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
столкнулся с проблемой, есть база данных в которой из всех таблиц есть 3-4 таблицы и с ними все время надо работать, у них много int занечений
при запросе нужно делать программное построение запросов... и это очень портит программу... примерно вот так только еще больше усложнить условий:
по-моиму это как-то криво, или нет? мне ORM не понравился сразу, может быть тут есть какие-то ньюансы при использвоании DBI, сделать нужно свой класс, но а что именно чтобы в нем было? или "забит" на sql и использовать DBIx::Class? |
||||
|
|||||
klem4 |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 27.7.2008 Репутация: 2 Всего: 2 |
Мм ну оптимизировать тут определенно можно, возможно не тот момент, что вы казали.
Во-первых по моему после выполнения вот этого кода в самом начале:
Следующая за ним ветка не выполнится никогда ....
Думаю стоит начать с этого. |
||||
|
|||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
какая ветка?
я просто так это написал для примера, я не про это спрашивал... не красиво выглядит когда есть большой запрос и его надо массива строить... и if else усложнить более не читаемое суть действия... Это сообщение отредактировал(а) gcc - 7.3.2009, 19:03 |
|||
|
||||
tolkien |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 277 Регистрация: 5.4.2008 Репутация: 4 Всего: 4 |
Вы можете сделать так:
1. создать отдельно файл pl (sub1.pl) в котором определить процедуры 2. в основном файле загрузить этот файл через do соответ. код в основном файле будет чистым и содержать только вызовы процедур определенных в файле sub1.pl |
|||
|
||||
Vaneska |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 15.3.2005 Где: Москва Репутация: 3 Всего: 4 |
1. Если у Вас таких запросов единичные случаи, то наверно не стоит сильно чего-то менять,
единственное что надо сделать - как можно тщательней причесать код, поставить комментариев побольше, чтобы сразу можно было понять, что к чему. 2. Если все таки хочется хоть как-то унивесиализировать код, то я делаю что-то на подобие такого:
Естественно это абстрактный пример, но идея, надеюсь, понятна. --------------------
http://isokolov.blogspot.com/ |
|||
|
||||
IceSunrise |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 7.4.2008 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
А почему вам сразу ORM не понравился? DBIx::Class для таких целей и предназначен.
|
|||
|
||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
UPD: не так понял первый пост сначала
Посмотрите в сторону SQL::Abstract. Менее комплексный модуль, но для простого составления запросов может подойдет Это сообщение отредактировал(а) KSURi - 10.3.2009, 13:57 -------------------- Died at Life.pl line 21 |
|||
|
||||
gcc |
|
||||||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
не понравилось тем что не видел большого приемущества, там есть некоторые вещи по лучше, например insert_update() мне показалось что ради этого не стоит пробовать... тем более оно уменьшает код по численности, но не по логике, так показалось по крайнем мере... больше не увидел новых вещей... а что там еще есть полезно? но в книге и везде рекомендовано использовать именно это, буду использовать, DBIx::Class, значит еще есть
недавно увидел DBIx::Abstract не много больше возможностей, но в каталисте нету модели для него, но можно сделать легко из DBI... Это сообщение отредактировал(а) gcc - 11.3.2009, 05:26 |
||||||
|
|||||||
dmitryk1 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 10.6.2008 Где: Новосибирск Репутация: 2 Всего: 2 |
Вообще странно, что приходится так эти запросы конструировать...
Видимо что-то не правильно спланировано. Лучше сделать несколько запросов. Полных. Отражающих суть приложения, а потом получать их из хэша в зависимости от условий. Типа: Если 'Admin' то $ps->{Admin} а в $ps->{Admin} лежит полный готовый и неизменяемый селект. Ну и разумеется везде в запросах "?" используется, чтобы уж совсем единичных запросов не было. |
|||
|
||||
IceSunrise |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 7.4.2008 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
ORM преследует вполне конкретные цели. Во-первых, вы уходите от конкретного типа СУБД и ее специфических языковых конструкций. Во-вторых, теоритически, ваш код сможет читать и поддерживать человек, не знающий SQL, хотя это достаточно сложно представить ![]() |
|||
|
||||
gcc |
|
||||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
а вот как это можно:
первый вариант очень плохой? |
||||
|
|||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
кто знает, кто использовал в чем разница в удобстве между Rose::DBx и DBIx::Class? я не вижу, но интересно...
|
|||
|
||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
хочется спросить вопрос такого плана, не много оффтопик...
правильно ли написан код в низу, не очень ли глупо он выглядит? я не много под другому написал чем в предыдущие разы... ORM я решил использовать в конце, то есть перевести некоторые запросы в больших модулях, в этом примере самый маленький модуль.... если выглядит плохо, то можно примеры на какой-то готовый код для примера, чтобы посмотреть, желательно тыкнуть пальцем (для обрабоки данных с форм я решил сделать класс другой, сейчас без него)
Это сообщение отредактировал(а) gcc - 25.3.2009, 17:09 |
|||
|
||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
использую DBIx::Abstract и DBI
http://search.cpan.org/~turnera/DBIx-Abstr...006/Abstract.pm DBIx::Abstract сразу просит ввести данные для подключения если я инициализирую два модуля, то будет 2 соединения к СУБД или одно? если два, то как передать $dbh в DBIx::Abstract? тут вот нашел модуль для переопределения модели... не понятно зачем он сделан http://desert-island.me.uk:8888/~castaway/...ss/Storage.html Это сообщение отредактировал(а) gcc - 25.4.2009, 15:50 |
|||
|
||||
Vaneska |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 15.3.2005 Где: Москва Репутация: 3 Всего: 4 |
Немного оффтопика..
gcc, позволю себе немного подправить код. Уж больно он не красиво смотрится.. Читаемости Ваших программ на пользу пойдет. В DBI много разных инетесных таких функций. А Slice - делает из массива полей в строке хеш. Очень удобно ![]() Добавлено через 9 минут и 27 секунд
Да. Будет 2 соединения. А $dbh передать, похоже, просто
Посмотрите исходный код метода connect модуля. Там в начале кода видно.. ![]() Щас еще получше посмотрел. Похоже и так можно:
--------------------
http://isokolov.blogspot.com/ |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |