LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> Perl (93) - Catalyst - MVC framework pro Perl

Perl V několika následujících dílech se budeme věnovat Catalystu, což je MVC framework, který si za krátkou dobu vydobyl velkou popularitu. Catalyst nabízí obrovskou paletu různých nástrojů. Naším cílem nebude kompletně ho popsat, ale spíše seznámit se s jeho filozofií.

30.11.2009 01:00 | Jiří Václavík | Články autora | přečteno 9007×

Obvyklý způsob navržení webové aplikace funguje takovým postupem, že každá stránka je generována nějakým skriptem. Tento skript nejprve získá data, dále s nimi něco udělá a na závěr vygeneruje HTML výstup. Takový postup bezesporu funguje. My si však nyní představíme jiný přístup.

MVC architektura

Model-View-Controller (MVC), pocházející původně ze Smalltalku, je způsob navržení aplikace, který ji rozděluje z hlediska programátora na tři části:

  • rozhraní pro uživatele
  • data
  • řadič

Systém funguje tak, že uživatel vyvolá nějakou událost a ta je předána řadiči, který na základě ní udělá změny v datech. Podle toho, jak se změnila data, nyní může zareagovat i rozhraní.

Přitom platí, že modifikace jedné části by neměla mít vliv na ostatní. Tedy například to, kde jsou uložená data, by nemělo mít vliv na vzhled aplikace.

K vytvoření aplikace je obecně nutné vytvořit tři komponenty, které reflektují právě popsanou architekturu.

  • View - tato komponenta rozhoduje o tom, jak se zobrazí aplikace uživateli
  • Model - reprezentace dat; může jím být v podstatě cokoliv
  • Controller - spolupracuje s modelem i uživatelským rozhraním; na základě požadavků uživatele (komponenta View) mění nebo získává data (komponenta Model)

Existuje celá řada frameworků implementujících architekturu MVC. Pro představu lze navštívit například wikipedii.

Catalyst

Catalyst je flexibilní web framework využívající architektury MVC inspirovaný zejména konkurenčním Ruby on Rails a Maypolem, který je určený pro rychlé vytváření velkých dobře udržovatelných aplikací. První verze Catalystu vznikla v roce 2005 a od té doby proběhl bouřlivým vývojem.

Catalyst lze používat na všech webových serverech s CGI nebo FastCGI. Pro testovací účely je navíc v distribuci Catalistu zahrnut i vlastní velmi jednoduchý HTTP server, který budeme používat při vývoji.

Další příjemnou vlastností je to, že bude potřeba psát minimum kódu. To ostatně uvidíme v následujících dílech.

Instalace

Je možné, že je ve vaší distribuci Catalyst již nainstalován, avšak nebývá to pravidlem. Některé distribuce ho dodávají jako balíček libcatalyst-perl.

Pokud Catalyst nainstalovaný nemáte, lze tak učinit standardním postupem pomocí perlového modulu CPAN.

$ cpan -i Catalyst::Runtime Catalyst::Devel

Obvykle se instaluje velké množství závislostí, takže celý proces může trvat i desítky minut. Pokud nastal nějaký problém, můžete se zkusit inspirovat v dokumentaci.

Vytvoření kostry aplikace

Catalyst je dodáván se shellovým skriptem catalyst.pl. Tento příkaz vytváří kostru každé webové aplikace, na kterou budeme chtít Catalyst použít. Zkusme spustit následující příkaz.

$ catalyst.pl MojeAplikace

Můžeme pozorovat, že se vytvořil adresář MojeAplikace a uvnitř něj řada souborů.

created "MojeAplikace"
created "MojeAplikace/script"
created "MojeAplikace/lib"
created "MojeAplikace/root"
created "MojeAplikace/root/static"
created "MojeAplikace/root/static/images"
created "MojeAplikace/t"
created "MojeAplikace/lib/MojeAplikace"
created "MojeAplikace/lib/MojeAplikace/Model"
created "MojeAplikace/lib/MojeAplikace/View"
created "MojeAplikace/lib/MojeAplikace/Controller"
created "MojeAplikace/mojeaplikace.conf"
created "MojeAplikace/lib/MojeAplikace.pm"
created "MojeAplikace/lib/MojeAplikace/Controller/Root.pm"
created "MojeAplikace/README"
created "MojeAplikace/Changes"
created "MojeAplikace/t/01app.t"
created "MojeAplikace/t/02pod.t"
created "MojeAplikace/t/03podcoverage.t"
created "MojeAplikace/root/static/images/catalyst_logo.png"
created "MojeAplikace/root/static/images/btn_120x50_built.png"
created "MojeAplikace/root/static/images/btn_120x50_built_shadow.png"
created "MojeAplikace/root/static/images/btn_120x50_powered.png"
created "MojeAplikace/root/static/images/btn_120x50_powered_shadow.png"
created "MojeAplikace/root/static/images/btn_88x31_built.png"
created "MojeAplikace/root/static/images/btn_88x31_built_shadow.png"
created "MojeAplikace/root/static/images/btn_88x31_powered.png"
created "MojeAplikace/root/static/images/btn_88x31_powered_shadow.png"
created "MojeAplikace/root/favicon.ico"
created "MojeAplikace/Makefile.PL"
created "MojeAplikace/script/mojeaplikace_cgi.pl"
created "MojeAplikace/script/mojeaplikace_fastcgi.pl"
created "MojeAplikace/script/mojeaplikace_server.pl"
created "MojeAplikace/script/mojeaplikace_test.pl"
created "MojeAplikace/script/mojeaplikace_create.pl"
Change to application directory and Run "perl Makefile.PL" to make sure your install is complete

Uveďme ještě, že obsahovalo-li by jméno aplikace čtyřtečky, nahradily by se lomítkem a vznikla by adresářová struktura.

Význam vytvořených souborů

Přímo v adresáři MojeAplikace je soubor mojeaplikace.conf, což je klasický konfigurační soubor pro aplikaci používající Apache syntaxi. Někdy zde místo něj je soubor se stejnou funkcí s koncovkou .pl nebo .yml, kde mají konfigurační příkazy jiný tvar.

Soubor Makefile.PL slouží k vygenerování Makefile pro build naší aplikace.

Dále zde jsou soubory jako README a Changes, které mají standardní význam.

Také je zde několik důležitých adresářů. Sem patří i lib, kde jsou uloženy moduly pro Controller, View a Model. Již zde existuje soubor MojeAplikace.pm, což je základní modul naší aplikace; dále adresář MojeAplikace, který obsahuje adresáře Controller, Model a View. Zde bude mít aplikace uložené komponenty všech tří typů, které později budeme vytvářet. Jak vidíme, je zde již Controller Root.pm, který se stará o úvodní stránku aplikace.

V adresáři root je skladiště šablon. Podadresář static se používá většinou k uchovávání obrázků, souborů ke stažení nebo CSS.

Adresář t slouží k ukládání testů. Na začátku jsou zde vytvořené 3 testy: 01app.t pro test, zda se aplikace zkompiluje a 02pod.t a 03podcoverage.t pro účely dokumentace.

Nyní nás bude velmi zajímat adresář script obsahující několik perlových skriptů s různými účely.

Spuštění testovacího serveru a další skripty

Soubor script/mojeaplikace_server.pl je jednoduchý HTTP server, který můžeme používat při vývoji aplikace. Tento server spustíme standardním způsobem. Na obrazovce by se měl objevit výstup podobný následujícímu.

$ perl mojeaplikace_server.pl
[debug] Debug messages enabled
[debug] Statistics enabled
[debug] Loaded plugins:
.----------------------------------------------------------------------------.
| Catalyst::Plugin::ConfigLoader  0.27                                       |
| Catalyst::Plugin::Static::Simple  0.22                                     |
'----------------------------------------------------------------------------'

[debug] Loaded dispatcher "Catalyst::Dispatcher"
[debug] Loaded engine "Catalyst::Engine::HTTP"
[debug] Found home "/home/test/MojeAplikace"
[debug] Loaded Config "/home/test/MojeAplikace/mojeaplikace.conf"
[debug] Loaded components:
.-----------------------------------------------------------------+----------.
| Class                                                           | Type     |
+-----------------------------------------------------------------+----------+
| MojeAplikace::Controller::Root                                  | instance |
'-----------------------------------------------------------------+----------'

[debug] Loaded Private actions:
.----------------------+--------------------------------------+--------------.
| Private              | Class                                | Method       |
+----------------------+--------------------------------------+--------------+
| /default             | MojeAplikace::Controller::Root       | default      |
| /end                 | MojeAplikace::Controller::Root       | end          |
| /index               | MojeAplikace::Controller::Root       | index        |
'----------------------+--------------------------------------+--------------'

[debug] Loaded Path actions:
.-------------------------------------+--------------------------------------.
| Path                                | Private                              |
+-------------------------------------+--------------------------------------+
| /                                   | /index                               |
| /                                   | /default                             |
'-------------------------------------+--------------------------------------'

[info] MojeAplikace powered by Catalyst 5.80013
You can connect to your server at http://hostname:3000

Tím jsme spustili server. Pokud uděláme změny v adresáři lib, bude třeba webový server restartovat. Pokud však spustíme server s parametry -d -r, bude se o změny starat již spuštěný server sám.

$ perl mojeaplikace_server.pl -d -r

Dále jsou zde skripty mojeaplikace_fastcgi.pl a mojeaplikace_cgi.pl pro spuštění na jiném serveru.

Skript mojeaplikace_test.pl tiskne zdrojový kód požadované stránky bez spuštění serveru a dá se tedy použít na testování. Například pro výpis stránky /nejaka/cesta bychom použili následující příkaz.

$ perl mojeaplikace_test.pl /nejaka/cesta

Na konci výstupu vidíme zdrojový kód Page not found, což je správně, protože jsme zatím nic nevytvořili. Zkusme však otestovat kořenový adresář. Zde by se měl zobrazit zdrojový kód přednastavené webové stránky.

$ perl mojeaplikace_test.pl /

Úvodní stránka

Podívejme se ještě na výstup, který jsme dostali po spuštění serveru. Na konci je uvedena adresa http://hostname:3000, na níž se nám spustil webový server. Můžeme ji tedy zadat do webového prohlížeče a měli bychom spatřit úvodní stránku.

Úvodní obrazovka po spuštění webového serveru vygenerovaná Catalystem

Verze pro tisk

pridej.cz

 

DISKUZE

Nejsou žádné diskuzní příspěvky u dané položky.



Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

8.5.2016 17:19 /Redakce Linuxsoft.cz
PR: Dne 26.5.2016 proběhne v Praze konference Cloud computing v praxi. Tématy bude např. nejnovější trendy v oblasti cloudu a cloudových řešení, cloudové služby, infrastruktura cloudu, efektivní využití cloudu, možné nástrahy cloudů a jak se jim vyhnout
Přidat komentář

21.4.2016 8:01 /František Kučera
Spolek OpenAlt zve na 127. distribuovaný sraz příznivců svobodného softwaru a otevřených technologií (hardware, 3D tisk, SDR, DIY, makers…), který se bude konat ve čtvrtek 28. dubna od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

2.3.2016 22:41 /Ondřej Čečák
Letošní ročník konference InstallFest již tento víkend!
Přidat komentář

14.2.2016 16:39 /Redakce Linuxsoft.cz
O víkendu 5. a 6. března 2016 proběhne na pražském Strahově 8. ročník tradiční konference InstallFest. Celkem za dva dny uvidíte ​30 přednášek​ a ​6 workshopů.
Přidat komentář

5.2.2016 17:38 /Petr Ježek
Utilitka z XFce "xfce4-power-manager" nejen umožňuje nastavení lhůty pro uspání či hybernaci, ale i zapínání a vypínání prezentačního módu pro nerušené sledování videí. Stačí ji nastavit v každém vybavenějším panelu a v jakémkoli nontiled WM/DE.
Přidat komentář

10.1.2016 11:32 /Pavel `Goldenfish' Kysilka
LinuxMarket změnil provozovatele. Nově jej provozuje Marek Pszczolka. Více info a detaily #1 a #2.
Přidat komentář

29.12.2015 11:38 /Ondřej Čečák
Ještě posledních pár dní můžete přidávat příspěvky nebo nápady na Install Fest 2016, který se bude konat 5. a 6. března 2016.
Přidat komentář

8.12.2015 11:36 /Petr Ježek
Logické se stává realitou. LibreOffice a Thunderbird se mají dle článku na Redditu stát protiváhou MS řešení (MS Office a Outlook).
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

7.5.2016 14:58 / Teodor Komárek
Soubory

20.4.2016 0:07 / Jakub Cleing
Sázkový panel PHP FUSION

9.4.2016 9:43 / jiwopene@gmail.com
Re: problém s dpkg a nemožností instalovat

9.4.2016 9:41 / jiwopene@gmail.com
Re: změna velikosti disk.oddílu

9.4.2016 9:40 / jiwopene@gmail.com
Re: Přenesení starého OS Win7 na virtuál v Debianu

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2016) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze