Журнал Системный Администратор, Сентябрь 2006

Журнал Системный Администратор

Сентябрь 2006

Цена: $4.5 US

  Подписаться

Зарегистриванные пользователи, пожалуйста следуйте этой ссылке


Развиваем модуль DBI

Алексей Мичурин

DBI – это Perl-модуль для взаимодействия с базами данных. Наверно, я не сильно ошибусь, если скажу, что он используется в доброй половине всех существующих Perl-программ. Можно ли его усовершенствовать или адаптировать, пользуясь его объектно-ориентированной природой? Конечно!

Покопаться во внутреннем устройстве модуля DBI интересно по двум причинам. Во-первых, он весьма популярен и используется в проектах самого разного масштаба. Вам, я думаю, знакома ситуация: крупный проект развивался на MySQL 4.0, и, когда было накоплено немало кода, MySQL 4.0 сменили на 4.1. В этом случае сразу возникают проблемы с кодировками. Наиболее универсальное решение – выставлять кодировку после каждого вызова connect, но это может потребовать скорректировать код многих сценариев.

Аналогичная ситуация возникает, когда с одной базой работают комплексы программ, разработанные из расчёта на разные установки времени; например, одна программа предполагает, что системные часы идут по Гринвичу, а другая – по московскому времени. Тогда выставить единое время для базы не представляется возможным и каждый клиент должен выставлять локальную переменную time_zone. Как и в предыдущем, в этом случае есть два выхода: первый – «перелопатить» весь код; второй – написать модуль, наследующий все свойства DBI, но с некоторыми коррективами.

У каждого из этих подходов есть свои плюсы и минусы, выбор во многом зависит от конкретной ситуации, но для крупных проектов второй подход реализуется гораздо проще и быстрее, чем первый.

Кроме того, объектно-ориентированный подход более универсален и позволяет решать не только эти, но и многие другие задачи.

Вторая причина, по которой обратиться к модулю DBI будет весьма интересно, – это нетривиальность самого модуля. Как мы скоро увидим, чтобы унаследовать методы этого модуля, совсем недостаточно строчки:

# для DBI это не работает

@ISA=qw(DBI);

В этом смысле рассмотрение модуля DBI может подбросить разработчику пару ценных мыслей о том, как ему организовать свои собственные модули, классы, объекты и методы.

Весь SQL-код и код, зависящий от используемой базы данных, я буду писать, ориентируясь на MySQL, если вы работаете с другой СУБД, то, возможно, вам придётся внести в код незначительные изменения. Perl-составляющая кода и суть обсуждаемых в статье вопросов, конечно, от базы не зависят.

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

Подписаться на весь номер

Зарегистриванные пользователи, пожалуйста следуйте по этой ссылке