Webový framework Seaside - první aplikace

Většina článků o programování webových aplikací se dnes točí kolem frameworků napsaných pro jazyky PHP, Python a Ruby. Pojdmě se společně podívat na framework napsaný pro jazyk, který byl čistě objektový dávno předtím, než se většina z vás narodila - v sedmdesátých letech. Pro jazyk, jehož komunita stála za vznikem unit testů, extrémního programování a návrhových vzorů. Pro Smalltalk.

Tento článek nemá za cíl naučit někoho Smalltalk nebo framework Seaside, ale pouze ukázat ve velmi zahuštěné podobě to, co v žádné knížce ani učebnici nenajdete: rychlý návod, jak rozběhnout v tomto webovém frameworku první aplikaci.

Stažení a instalace

Seaside je dodáván v několika variantách pro různé dialekty jazyka Smalltalk. My zkusíme variantu pro Pharo, která je doporučována. Seaside pro Pharo je ke stažení přímo na webu projektu Seaside. Po stažení a rozbalení (One-Click Experience) archivu, můžeme hned spustit připravého zástupce/shell skript.

Vytvoření první aplikace

Smalltalkové aplikace se spouští tak, že se spustí virtuální stroj a jako parametr se mu předá cesta k binárnímu obrazu. Obraz (image) je vlastně snapshot stavu všech objektů (a jelikož i třídy jsou ve Smalltalku objekty tak i těch). Obraz obsahuje nejen naše vlastní třídy, ale i všechny třídy Phara (odnož Smalltalku) a Seaside.

Když spustíme Seaside, otevře se nám lehce upravené vývojové prostředí Pharo. Důležité je okno System Browser, které buď bude už otevřené a nebo otevřeme nové klinutím kamkoliv do hlavního okna a zvolením System Browser v nabídce.

Co která část okna znamená je zachyceno v přiloženém obrázku.

Nejprve tedy klikneme pravým tlačítkem myši do části seznamu kategorií tříd a přidáme novou kategorii, která bude sdružovat všechny třídy naší nové aplikace.

Vybereme novou kategorii a přidáme novou třídu ("new class template"), která bude hlavní komponentou celé aplikace. Třída musí dědit od třídy WAComponent, kód tedy bude vypadat třeba nějak takto:

WAComponent subclass: #MildeHome
    instanceVariableNames: ''
    classVariableNames: ''
    poolDictionaries: ''
    category: 'Milde'

Změny potvrdíme ctrl+s (nebo pravé tlačítko a Accept).

Nyní přidáme několik potřebných metod. Klikneme levým tlačítkem do seznamu kategorií metod a dole se zobrazí šablona nové metody. Tu stačí upravit a potvrdit. Nejprve přidáme metodu pro vygenerování HTML kódu komponenty.

renderContentOn: html
    html heading with: 'Hello world'

Nyní musíme ještě zařídit, aby naše třída mohla být vybrána jako kořenová komponenta. Toho dosáhneme vytvořením metody canBeRoot na třídní straně (z pohledu C/PHP/Java vývojáře je to tedy vlastně statická metoda). Zvolíme naší třídu a klikneme na tlačítko Class pod seznamem tříd. Opět klikneme do seznamu kategorií metod, a vytvoříme potřebnou metodu.

canBeRoot
    ^true

Konfigurace nové aplikace

Nyní již můžeme otevřít konfiguraci Seaside a namapovat naši malou aplikaci na nové URL. To provedeme tlačítkem Add vlevo nahoře. Vybereme vhodný název (použije se jako URL) a jako typ Application. V levém sloupci se objeví naše nová aplikace. Vybereme ji a v sekci General změníme Root Class na naši třídu. Jakmile dáme apply, objeví se okamžitě aplikace na adrese http://localhost:8080/zadana_cesta

Běh Seaside za Apachem

Přestože Seaside obsahuje zabudovaný HTTP server, ne vždy budeme chtít, aby zrovna tento naslouchal na portu 80 a obsluhoval všechny požadavky. Velmi pravděpodobně na serveru, kde budeme provozovat Seaside poběží i weby napsané v PHP, Ruby nebo Pythonu. Případně budeme chtít, aby statické soubory (Javscript, obrázky, CSS) posílal klientům jiný HTTP server.

Můžeme tedy velmi snadno provozovat na portu 80 webový server Apache a Seaside přeposílat pouze požadavky na dynamický obsah.

<VirtualHost *:80>
    ServerName seaside.local
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^/(.*)$ http://localhost:8080/$1 [P,L]
</VirtualHost>

Kam dál

Pokud Vás framework Seaside zaujal a Smalltalk již máte v malíčku, doporučuji podívat se na seriál o Seaside, který vyšel na Rootu. Spoustu dalšího čtení se dá nalézt přímo v dokumentaci na webu Seaside.

Pokud toho o Smalltalku mnoho nevíte, doporučuji začít knížkou Pharo by example, která je zdarma ke stažení.