Catalyst — это фреймворк веб-приложений с открытым исходным кодом , написанный на Perl . Он тесно следует архитектуре модель–представление–контроллер (MVC) и поддерживает ряд экспериментальных веб-шаблонов. Он написан с использованием Moose , современной объектной системы для Perl. Его дизайн во многом вдохновлен такими фреймворками, как Ruby on Rails , Maypole и Spring .
Catalyst может использоваться разработчиками веб-приложений для работы с кодом, общим для всех веб-приложений. Он предоставляет интерфейс для получения запросов страниц, отправки запросов страниц в код, написанный разработчиком, для обработки и возврата запросов. Catalyst также предоставляет стандартизированный интерфейс для моделей данных, аутентификации, управления сеансами и других общих элементов веб-приложений.
Все эти элементы реализованы как плагины к набору общих интерфейсов, что позволяет разработчику изменять конкретный используемый метод (например, хранение сеанса в общей памяти вместо таблицы базы данных или использование FastCGI вместо работы в качестве модуля Apache mod_perl) путем изменения конфигурации Catalyst для использования другого плагина без изменения кода приложения.
Catalyst в основном распространяется через CPAN , который является официальным каналом распространения библиотек и приложений Perl.
Maypole был одним из первых фреймворков веб-приложений для языка программирования Perl, основанного на шаблоне MVC ; его основным автором был Саймон Козенс. [2] Catalyst начинался как ответвление Maypole, призванное стать Maypole 3.0. [3] Однако разработка Maypole была прекращена с его последним релизом в апреле 2008 года, [4] и Catalyst стал его современным поддерживаемым эквивалентом.
Первая версия Catalyst для разработки вышла 28 января 2005 года. Первая официальная версия была опубликована на CPAN 16 февраля 2005 года. [5] По состоянию на июнь 2011 года в Catalyst было зарегистрировано 201 участник. [6]
Catalyst основан на принципе « не повторяйся » (DRY), что означает, что определения должны быть сделаны только один раз. Catalyst можно использовать с автоматической загрузкой классов из базы данных через один из многих модулей загрузчика, таким образом не требуя кода для уровня базы данных. Но если вам нужна гибкость ручного выполнения всего, это также вариант. Другим руководящим принципом Catalyst является гибкость.
Catalyst способствует повторному использованию существующих модулей Perl, которые уже хорошо справляются с типичными задачами веб-приложений.
Catalyst имеет большой выбор плагинов. [7] Например, он генерирует JavaScript для Ajax и RIA с помощью модуля Catalyst::Plugin::Prototype ( prototype — это фреймворк Ajax ). Плагины охватывают множество областей, например, аутентификацию, управление сеансами, согласование HTTP и REST.
Catalyst также можно использовать с другими фреймворками Ajax, такими как jQuery или YUI , библиотека пользовательского интерфейса Yahoo!.
Для разработки и тестирования Catalyst имеет встроенный простой HTTP-сервер. Для производственного использования рекомендуется Apache , lighttpd , Hiawatha , Cherokee или Nginx с поддержкой FastCGI или mod_perl , но подойдет любой веб-сервер с поддержкой CGI или FastCGI. В Apache mod_perl может значительно повысить производительность, хотя его использование может быть проблемой, поскольку может быть небезопасно совместно использовать несколько приложений под mod_perl.
С начала 2008 года приложения Catalyst также могут быть развернуты с использованием движка HTTP::Prefork [8] , который обеспечивает развертывание высокопроизводительных приложений Catalyst без отдельного веб-сервера. Начиная с выпуска Catalyst 5.9, Catalyst также выводит данные в спецификацию PSGI , поэтому его можно запустить на любом сервере Plack и вместе с любым сервером или протоколом, поддерживающим спецификацию PSGI, включая Mongrel2 .
Catalyst может работать с использованием любой базы данных, поддерживаемой Perl DBI (это означает почти все, что угодно, даже файл CSV ), но рекомендуется использовать надлежащую СУБД или ОУБД . Доступ к базе данных полностью абстрагирован с точки зрения программиста, и Catalyst через один из своих классов моделей автоматически обрабатывает доступ ко всем базам данных — хотя, при необходимости, возможно использование прямых SQL- запросов. Это обеспечивает нейтральность к базе данных, переносимость приложений на различные системы баз данных и удобство использования уже существующих баз данных для разработки приложений Catalyst в максимально возможной степени, хотя из-за различных наборов функций СУБД это не полностью гарантируется только фреймворком. Поддерживаются несколько различных систем СУБД, включая MySQL , PostgreSQL , SQLite , IBM Db2 , Oracle и Microsoft SQL Server . Для ОУБД имеется явная поддержка KiokuDB через Catalyst::Model::KiokuDB. [9] Абстракция модели позволяет получать доступ к базам данных любого типа через Catalyst::Model::Adaptor. [10 ]
Многие проекты на базе Catalyst используют DBIx::Class в качестве уровня ORM , который обеспечивает дополнительную абстракцию SQL-запросов, используя API на основе наборов результатов с прозрачной поддержкой произвольных объединений и других функций.
Веб-сайты, работающие на Catalyst, включают Magazines.com , [11] bbc.co.uk iPlayer backend, [12] DuckDuckGo's Community Platform, http://flexibase.io и Tripwolf.com. Движок MojoMojo wiki написан с использованием Catalyst. [13]
До 2012 года YouPorn работал на платформе Catalyst [14]. [15]