[Kiev-pm] MVC::Neaf: Not Even A Framework
Konstantin S. Uvarin
khedin at gmail.com
Fri Dec 2 06:39:35 PST 2016
Приветствую всех!
Сегодня я бы хотел представить веб-фреймворк на перл 5 собственного
сочинения, Ниф (Not Even A Framework). Написан он больше для
самообразования, т.к. и так их как собак нерезаных, но мне кажется, в нём
есть некие здравые идеи. Суть такова:
1. Приложение разбивается на маленькие процедуры-хэндлеры, привязанные к
пути в URI (см. тж. https://metacpan.org/pod/Dancer )
2. Хэндлер получает на вход объект запроса, из которого потом достаются
параметры, куки, заголовки и т.д. (см. тж. https://metacpan.org/pod/Kelp )
3. Параметры и куки нельзя достать без валидации, например, при помощи
регулярного выражения:
$req->param( foo => qr/\d+/ );
См. тж. perl -T
В качестве альтернативы есть самовалидирующиеся формы на базе
Validator::LIVR или самописного каличного движка (но ЛИВР лучше).
См. тж. https://metacpan.org/pod/Validator::LIVR и
https://metacpan.org/pod/Data::CGIForm
4. Хэндлер может вернуть ссылку на хэш с какими угодно параметрами, которая
затем передаётся в шаблонизатор для рендеринга. На данный момент
поддерживается Template::Toolkit и JSON/JSONP
Также есть ограниченный набор ключей с минусом, которые используются для
управления самим фреймворком - -template, -status и т.п
5. Хэндлер может выбросить исключение: die 404 - легальный способ вернуть
настраиваемую страницу not found. Все нормальные исключения (не
трёхцифренные и не специальные объекты самого Neaf) трактуются как error
500.
6. Один и тот же код может в неизменном виде запускаться как cgi, psgi и
под Apache2 + mod_perl (с некоторым бубном). Также поддерживается дебаг из
командной строки:
perl myapp.pl --help
perl myapp.pl --list
7. Кроме этого есть поддержка статических страниц (не надо держать отдельно
нормальный веб-сервер, чтобы проверить CSS или логотип), сессий в несколько
недоделанном виде (планируется улучшение), отложенные действия, выполняемые
после запроса, ну и по мелочи ещё.
Пример кода:
use strict;
use warnings;
use MVC::Neaf;
MVC::Neaf->route( "/" => sub {
my $req = shift;
return {
-template => \'Hello, [% name %]!',
-type => 'text/plain',
name => $req->param( name => qr/\w+/, "Stranger" ),
},
});
На каждую фичу есть небольшой пример, они же используются как
дополнительные смоук-тесты к 80% покрытию юнит-тестами. см.
https://github.com/dallaylaen/perl-mvc-neaf/tree/master/example
Собственно фреймворк:
https://metacpan.org/pod/MVC::Neaf
Буду рад обратной связи, критике, багрепортам и запросам новых фич (см. тж.
https://github.com/dallaylaen/perl-mvc-neaf/blob/master/TODO )
С уважением,
--
Konstantin S. Uvarin
jabber: see <from>
skype: kuvarin
http://github.com/dallaylaen
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/kiev-pm/attachments/20161202/ac2490b0/attachment.html>
More information about the Kiev-pm
mailing list