[Warszawa-pm] Warsztaty (19.07.2010) WebNano - Addendum

Zbigniew Lukasiak zzbbyy w gmail.com
Czw, 22 Lip 2010, 10:32:42 PDT


Witam,

Obawiam się, że z WebNano to nikt za dużo nie zapamiętał bo było w
środku, a poza tym nie miałem za dużo czasu - więc dla przypomnienia i
uzupełnienia:

WebNano to głównie dispatching. Adres '/Ksiazka/strona/3' wywoła
metodę strona_action kontrolera Ksiazka.pm z parametrem 3 - czyli jest
to taki najprostrzy dispatching uwzględniający rozbicie aplikacji na
'kontrolery'.  To czego nie zdąrzyłem dodać na warsztatach to:

- zamiast postfixu '_action' (jak komuś sie to bardzo nie podoba)
można używać atrybutu 'url_map' w kontrolerze - działa on analogicznie
do run_mode w CGI::Application czyli mapuje fragment urla na metodę

- cały ten dispatching zachodzi w kontrolerze i łatwo go podmienić
('override'), w /extensions napisałem parę przykładów jak to zrobić i
na przykład zaimplementować 'get / => sub { ... }'  (najłatwiej
podmienić metode 'local_dispatch')

To co dla mnie było ważne to to, żeby to był mechanizm prosty i dzięki
temu łatwo rozszerzalny.  W Catalyscie dispatching jest bardzo
rozbudowany i prawie wszystko można w nim zrobić, ale przez to jest
trudny w użyciu - to co ja chciałem mieć to coś co by pokryło 80%
potrzeb, było proste a jednocześnie łatwe w rozbudowie.

Później zaczełem się zastanawiać nad dziedziczeniem i pisaniem
gotowych komponentów które by zawierały w sobie szablony i to w taki
sposób, że można by je łatwo stopniowo kawałek po kawałku podmieniać.
Zarówno całych aplikacji jak i kontrolerów. To jest trudne - ale
korzyści byłyby też duże.  Mam nadzieję, że dzięki temu, że WebNano
jest takie malutkie to to będzie możliwe do zrobienia.  W testach
możecie sprawdzić jak to działa w tej chwili - są testy do
dziedziczenia z całej aplikacji i też z kontrolera.

Poza tym to czym się WebNano odróżnia od prawie wszystkich Perlowych
frameworków (poza chyba tylko Tatsumaki) to to, że objekt kontrolera
jest insancjonowany podczas przyjmowania requesta, dzięki temu nie
trzeba tego requesta ciągle przekazywać jako parametr.  W Catalyscie
wszędzie trzeba przekazywać $c - zawsze mi się to wydawało
nieeleganckie i jakby zaprzeczające idei programowania objektowego.

No i kodu w WebNano jest naprawdę malutko na razie - w /lib mniej niz
250 lini - łatwo więc się przez niego przegryźć.

-- 
Zbigniew Lukasiak
http://brudnopis.blogspot.com/
http://perlalchemy.blogspot.com/


Więcej informacji o liście Warszawa-pm