[Moscow.pm] В чем смысл Catalyst?

Dmitry Simonov dsimonov на gmail.com
Вс Ноя 16 11:35:27 PST 2008


Привет!

В традиционных мануалах по перлу разумеется все примеру показываются с
использованием CGI-скриптов, где всё записано вместе –sql-запросы, куски
html-кода и даже нередко java-script-вставки. И кое-где в промежутках между
этим всем добром иногда встречается перл :)

Начинающие разработчики с этого и начинают.

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

Такой скрипт разумеется проще написать, чем большой громоздкий продукт, а уж
собрать из нескольких скриптов некий сайт вообще задача вполне решаемая.

Эти скрипты, собранные в сайт, будучи однажды отлаженными, работают годами.
Дёшево и сердито. Я слышал про команды под руководством известных здесь на
листе рассылке деятелей, которые в общем всю работу на таких скриптах и
строят. Так как оптимизировать и развивать сами эти скрипты довольно сложно,
то новую функциональность получают  либо рисуя на коленке новый скрипт и
путём шаманских действий, включая их в общем комплект, либо вообще тупо
копируют один из существующих скриптов для добавления скажем нового раздела
на сайте.

Решение дешёвое и сердитое.  Это отлично работает с простыми или даже
небольшими, но нетривиальными приложениями, но все программные продукты
имеют тенденцию расти, и без хороших концепций, они становятся проблемными в
обслуживании и поддержке. То есть перестают быть сначала простыми, а потом
дешёвыми.

Это действительно ОЧЕНЬ трудоёмко – развивать такие скрипты, в которых
намешано всё. Трудности начинаются с того, что каждый скрипт на сайте
нуждается в аналогичном коде, чтобы загружать конфигурационный файл и
обрабатывать ошибки. Написание кода доступа к базе данных очень часто
повторяется, а структуры данных из базы не обязательно представляют объекты,
с которыми Ваше приложение захочет иметь дело. Дизайнерам покажется сложной
смена темы сайта, так как код, генерирующий HTML, перемежается с кодом Perl.
И наконец CGI-скрипты могут быть медленными, потому что весь интерпретатор
Perl в целом, как и модули, используемые скриптом, требуют загрузки в память
на каждом запросе.

Давайте ещё раз подробнее посмотрим, из чего эти скрипты состоят
функционально:

    * нечто, что генерирует HTML;
    * нечто, что разбирает аргументы, переданные по HTTP;
    * нечто общающееся с базой данных;
    * нечто содержащее логику вашего приложения;
    * нечто управляющее пользовательскими аккаунтами;
    * нечто сохраняющее промежуточные данные (напр. сессии, основанные на
куках).

Если вы писали веб приложение (даже если это был простейший скрипт,
выводящий "Hello, World!"), то значит вы писали бОльшую часть вещей,
описанных выше, самостоятельно. Вы, возможно, просто использовали print для
создания HTML и не заботились о сложных системах шаблонов. Иными словами,
через некоторое время у вас будет куча программ, которые выводят HTML
подобным образом. Уверен, вы можете перенести некоторые общие части в модули
и использовать их из всех ваших программ. Но в действительности, вы ищите
решения для сверхтипичных задач, возникающих в каждом веб приложении.

Так что некоторые продвинутые люди потратили свое свободное время для
создания компонент, которые "закрывают" эти ежедневные задачи. Например,
существуют Perl пакеты Mason, который работает с созданием HTML — т.е.
является системой шаблонов. Используя TT, вы создаете файл (называемый
шаблоном), который содержит целиком вашу HTML страницу. У вас есть
возможность добавить Perl конструкции прямо в этом файле, в том месте, где
вам нужно, а также получить доступ к переменным из других частей вашего
приложения. И поскольку эти шаблоны могут использовать друг-друга, то вы
имеете возможность легко поменять дизайн вашего сайта, просто изменив
базовый шаблон.

Это просто пример того, как компоненты могут облегчить жизнь программисту. И
существует большое количество уже готовых компонент. Это очень хорошая идея
— использовать их, вместо того чтобы вручную разбирать каждодневную рутину.
А теперь представьте, что у вас несколько полезных компонент и они работают
слаженно, вместе.

Так вот, веб фреймворки, такие как Catalyst, как раз и занимаются этим.

P.S. для написания данного ответа использовалось несколько статей на сходную
тематику и если кто-то увидит здесь знакомые строчки, просто поразитесь
насколько затронут типовой вопрос и как легко он ложится на современные
perl-технологии :)


2008/11/14 Dmitry E. Oboukhov <unera на debian.org>

> нет я не менеджер :)
> но как-то просмотренные примеры не убедили
> на схожие действия схожее количество кода ну и засомневался
> я а стоит ли оно того?
>
> --
> ... mpd is off
>
> . ''`.                               Dmitry E. Oboukhov
> : :'  :   email: unera на debian.org jabber://UNera@uvw.ru
> `. `~'              GPGKey: 1024D / F8E26537 2006-11-21
>  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.9 (GNU/Linux)
>
> iEYEARECAAYFAkkd4ZYACgkQq4wAz/jiZTeYqACgndHA/MwuvyNJkaiuwP8VHIHx
> ixwAnjexN4bZuva16S61R2qzE9J77uLq
> =Y8IH
> -----END PGP SIGNATURE-----
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено&hellip;
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20081116/addc6a97/attachment-0001.html>


Подробная информация о списке рассылки Moscow-pm