Изменения

Sway Solstice

1795 байтов добавлено, 12:35, 20 июня 2016
м
Нет описания правки
{{Warning}} Сие есть древность и находится глубоко в архиве. [[Sway Solstice — Solstice]] — название Новой Платформы для веб-приложений, выросшей из [[Vitaphoto]]. Название '''Sway''' выбрано х-з почему, но в переводе с английского означает, например, «взмах». Название '''Solstice''' выбрано потому, что Новая Платформа началась в районе дня летнего [[rupedia:Солнцестояние|солнцестояния]], а solstice — это в переводе и есть «солнцестояние». Забавно, что существует ещё один фреймворк для построения веб-приложений, тоже названный {{CPAN|Solstice}}, и названный независимо. ''Видимо, у всех веб-разработчиков в районе дня солнцестояния обострения случаются, даааа…''
== Цель ==
* Модули, модули, модули, и ничего, кроме модулей. Никаких жёстких завязок на соединение с БД или разбор URL в самом Sway.
* Конфигурация приложения представляет собой вложенный хеш, хранимый просто в виде Perl-кода. Система загрузки конфигурации позволяет объединять несколько файлов для поддержки стандартных конфигураций.
* Полная абстракция от среды запуска с использованием стандартных модулей {{CPAN|HTTP::Request}} и {{CPAN|HTTP::Response}}. Раздумья на эту тему можно почитать, например, здесь: [[Платформы для запуска Perl веб-приложений]]. Результат получился просто замечательный — чище и понятнее API, по-моему, быть просто не может.
* Каждый модуль в рамках одного веб-приложения создаётся в одном экземпляре. Модули создаются по требованию — при первом обращении. Межмодульное взаимодействие тривиально — <code>$www->name</code> через AUTOLOAD даёт экземпляр модуля name. Если модуль name захочет, он даже сможет переопределить то, что возвращается AUTOLOAD с его именем — это удобно для модулей, в которых только 1 функция.
* Использование [[Filter::AutoImport]], чтобы не писать в начале каждой функции длинные серии объявлений переменных <code>$self->www->config</code> и т. п.
* Обёрнутые в функции обращения к БД из модулей. Живут они в Sway::db::, а рядом с ними лежат SQL дампы нужных таблиц.
* Новая версия [[Шаблонизатор VMX::Template|Шаблонизатора VMX::Template]] — упрощённая, аккуратная, почищенная, ещё более быстрая.
*: Шаблонизатор специально сделан максимально простым, дабы избежать анти-паттернов разработки, к которым подталкивает {{CPAN|Template::Toolkit}}, а именно, к перемещению 50 % логики приложения в шаблоны. Примеры того, где так происходит — [http://www.bugzilla.org/ Bugzilla], [http://www.vsem.ru/ Vsem.ru](в багзилле почта до сих пор рассылается из шаблонов…).*: [[VMX-Template]] создан когда-то по мотивам шаблонизатора phpBB2, самого созданного по мотивам шаблонизатора [http://sourceforge.net/projects/phplib/ phplib], о чём напоминает его синтаксис. Умеет он буквально 5 вещей: циклы, IF’ы, INCLUDE (включение другого шаблона), подстановки выражений в код, присваивания. Данные в шаблон передаются просто Perl-хешем, без промежуточных уровней вроде <code>assign_vars()</code> и <code>assign_block_vars()</code> (phpBB2), {{CPAN|Template::Stash}} (TT). Код шаблонакомпилируется шаблона компилируется сначала в Perl-код и кэшируется на диске, а потом компилируется интерпретатором и кэшируется в памятипамяти — производительность в итоге тоже на высоте.* Поддержка [[Funq]]. Штука получилась интересная, хотя и не факт, что распространится«взлетит».
Примеры:
Планируемые:
* <s>[[Версионирование схем баз данных]] с возможность генерации скрипта проноса или отмены обновлений.</s> «ниасилилЪ» Чуть подробнее:
Обработчик Теперь обработчик приложения делает фактически только eval {} для отлова исключений и подключение директорий @INC. В старой платформе обработчик делал Много Чего, в результате появлялись жёсткие завязки на различные моменты. Теперь же платформа от них свободна, и вся функциональность, имевшая жёсткие завязки, теперь разнесена по модулям, и её можно как использовать, так и '''не''' использовать:
Стандартные библиотечные модули больше не предоставляют собой «готовых страниц» — каждый модуль теперь являет собой просто библиотеку функций, а функции, выводившие что-то в шаблон, теперь просто возвращают хеш, который можно подставлять, куда душе угодно.
Страница в ответе формируется теперь не из конкатенации вывода нескольких шаблонов (что, кстати, влекло довольно влечёт за собой весьма кривой обходной манёвр в шаблонизаторе для организации передачи значений из шаблона в шаблон), а из вывода одного шаблона, который, возможно, пожелает включить в себя какие-либо другие.
== Некоторые раздумья ==
А кроме того, все модули создаются по требованию, поэтому «заранее» выставлять настройки своих стандартных URI не могут.
На входе мы имеем некоторый **''адрес страницы**'', то есть практически практически — набор неких параметров.
На выходе мы имеем саму страницу. В рамках нашей идеологии она составляется из готовых блоков, предоставляемых компонентами.
И ещё один кейс — это к примеру JSON-ответы: «нормальных» шаблонов нет, URI нужны. ЧТО ДЕЛАТЬ??? Можно конечно на этот случай как раз оставить дёрганье фиксированного uri(ЧЕГО_ТО).
=== Как быть с хешем переименований таблиц $t ? ===
Вероятно, его нужно ликвидировать, так как в большинстве случаев он бессмыслен…
Кстати, для полной абстракции от БД нужно все вызовы SQL оборачивать в функции.
** '''Вывод: хеш $t ликвидировать в задницу, в библиотечных модулях все вызовы к БД оборачивать в функции**.'''
[[Категория:РазработкаАрхив]]
[[Категория:Sway]]
[[Категория:Perl]]