Изменения

Перейти к: навигация, поиск

Проблема модульной веб-разработки

9999 байтов убрано, 13:10, 23 августа 2009
Нет описания правки
Вероятно, в Новой Платформе данный подход таки и будет опробован, но вполне возможно, что приложение в итоге получится «адовое», а вовсе не удобное.
 
== Идеи ==
 
А теперь опишем идеи, лежащие в основе Новой Платформы.
 
=== Старые, проверенные ===
 
Во-первых, доказавшие свою рациональность идеи из старой платформы:
 
Приложение состоит из модулей. Модули, модули, и ничего, кроме модулей.
 
Для вывода кода страниц используется [[VMX-Template|шаблонизатор]] своей разработки. Причём, он специально сделан максимально простым, дабы избежать анти-паттернов разработки, к которым подталкивает [[TemplateToolkit|Template::Toolkit]], а именно, к перемещению 50 % логики в шаблоны. Примеры того, где так происходит — Bugzilla, Vsem.ru. Используется шаблонизатор, созданный когда-то по мотивам шаблонизатора phpBB2, о чём напоминает синтаксис. Умеет буквально 5 вещей: циклы, IF’ы, INCLUDE (включение другого шаблона), подстановки выражений в код, присваивания. Данные в шаблон передаются просто Perl-хешем.
 
Конфигурация приложения представляет собой вложенный хеш, хранимый просто в виде Perl-кода.
 
=== Противоположности старым, нерациональным ===
 
Во-вторых, идеи, созданные «от противного» по отношению к старой платформе:
 
Модули теперь создаются по требованию, а не все сразу при старте приложения. Поэтому и modules_allow и modules_deny в конфигурации больше нет.
 
Обработчик приложения делает фактически только eval {} для отлова исключений и подключение директорий @INC. В старой платформе обработчик делал Много Чего, в результате появлялись жёсткие завязки на различные моменты. Теперь же платформа от них свободна, и вся функциональность, имевшая жёсткие завязки, теперь разнесена по модулям, и её можно как использовать, так и '''не''' использовать:
 
# Нет виртхостов (хотя они реализуемы) — идея размещения нескольких сайтов в одной базе данных показала свою несостоятельность;
# Нет завязки на вызов метода render() у модулей, то есть методы обработки можно создавать любые по желанию;
# Нет конфигурации «последовательностей модулей», то есть вызовы разных модулей можно комбинировать в коде как душе угодно;
# Нет хеша имён таблиц, сопоставляющего «реальные» таблицы «виртуальным»;
# Нет завязки на регулярные выражения в разборе URI, а точнее, нет вообще никакой завязки в разборе URI, как и самого стандартного разбора URI, кроме «страница?параметры»;
# Нет завязки на обязательное соединение с БД;
 
Стандартные библиотечные модули больше не предоставляют собой «готовых страниц» — каждый модуль теперь являет собой просто библиотеку функций, а функции, выводившие что-то в шаблон, теперь просто возвращают хеш, который можно подставлять, куда душе угодно.
 
Страница в ответе формируется теперь не из конкатенации вывода нескольких шаблонов (что, кстати, влекло довольно кривой обходной манёвр в шаблонизаторе для организации передачи значений из шаблона в шаблон), а из вывода одного шаблона, который, возможно, пожелает включить в себя какие-либо другие.
 
=== Новые ===
 
И в-третьих, новые идеи:
 
Все обращения к БД из библиотечных модулей теперь оборачиваются в функции и живут в Sway::db::, а рядом с ними лежат SQL дампы нужных им таблиц; аналогично обращениям к БД делаются абстракции других операций — иногда хранения (например сессий в кэше), иногда преобразования (например текста сообщений форума).
 
[[Версионирование схем баз данных]] с возможность генерации скрипта проноса или отмены обновлений.
 
Поддержка [[Funq]].
 
EmLog — простой интерфейс, этакий RSS с PUSH’ем для блогов, в качестве транспорта использующий Email. Для организации распределённых блог-сетей.
 
== Некоторые вопросы ==
 
Далее опишем некоторые вопросы, возникавшие в процессе разработки.
 
=== Установка обработчика в Apache ===
 
Требования:
 
* Должна обеспечиваться возможность работы нескольких экземпляров одного приложения в одном экземпляре веб-сервера и одном интерпретаторе (без PerlOptions +Parent);
* Установка обработчика должна быть максимальной простой, без извращений с вызовом Perl кода Sway::WWW->Apache2(..);
* Должно быть возможно чтобы пакеты-обработчики были разные, а не один на _все_ приложения. То есть чтобы приложение могло сделать свой обработчик.
 
Решение:
 
<pre>
PerlFlags -I/home/www/vitaphoto/lib # задаётся путь к библиотекам
PerlSetVar SwayConfig /etc/sway/vitaphoto.conf # задаётся конфигурационный файл
PerlResponseHandler Sway::WWW # и обработчик
</pre>
 
А Sway::WWW уже передаст запрос в нужный экземпляр приложения, который не обязательно будет экземпляром класса Sway::WWW.
 
=== Модули и компоненты? ===
 
Нужно ли идеологически разделять модули на '''модули''' и '''компоненты''' ? (первое — просто предоставляют какие-то функции, второе — представляют собой конкретную страницу).
 
* '''За''': Меньше помойка.
* '''Против''': Компонент одновременно может быть и модулем.
* '''За''': Компонент типа attach из старой версии Sway представляет собой некоторую //конкретную// функциональность.
* '''Против''': С другой стороны, почему бы не представить эту функциональность в виде функции вывода чего-то в шаблон?
* '''За''': Вероятно, нужно будет писать меньше кода в случае использования готового компонента.
* '''Против: Как быть с изменением организации страницы? Например, с добавлением других шаблонов?'''
 
Последний пункт является решающим. В рамках выбранной идеологии «готовых компонентов» существовать просто не может.
 
=== Форумная функциональность? ===
 
Какая функциональность в форумном движке является необходимой? По убывания необходимости:
 
* Форумы, темы, сообщения, BBкоды;
* Прикреплённые темы, темы с обратным отображением, иерархические темы, темы с автоматическим индексом в верхнем сообщении;
* Email и RSS подписки на новые сообщения, слежение за темами.
* Профили пользователей (icq, телефон, email, настройки, на форуме GTSR — к примеру, машина), личные сообщения.
* Скрытые форумы, привязка сообщений к разделам сайта;
[[Категория:Sway]]

Навигация