WebMatrix ja Razor - lihtne näiterakendus
21.07.2010 | Gunnar
Hiljuti välja antud WebMatrixi betaga tuli välja ka ASP.NET-i uus vaadete renderdamise mootor nimega Razor. Sellele lisaks SQL Server CE 4.0 beta versioon. Kui eelmises WebMatrixi teemalises postituses pealkirjaga WebMatrix - uus õhuke IDE veebiarendajatele sai antud lühidane ülevaade uutest asjadest, siis käesolevas postituses lööme käed külge ja proovime midagi lihtsat tööle ka panna.
Alustasin oma katset lihtsalt. Lasin WebMatrixi käima ning lõin template põhjal uue saidi, millel nimeks Starter Site. Midagi suuremat see ei sisalda, kuid ASP.NET MVC projektidele tüüpiline disain on saidil küljes, võimalik on ennast kasutajaks regada ja sisse logida. Kui vaadata faile, mis loodi, siis tekitab veidike kõhedust see, et pole tüüpilist kontrollerite ja vaadete kataloogide struktuuri – kõik jutt läheb kirja otse vaatesse.
Praegu on see nii, kuid järgmises ASP.NET MVC versioonis on lubatud, et tuleb mitme view engine-i tugi ning see tähendab seda, et struktuurilt võiks failid olla jaotatud nagu enne. Kas see nii hakkab olema ka WebMatrixis – pole kindel. Kuid lähemal uurimisel leiame siiski päris mitmeid ASP.NET MVC funktsionaalsusi ja seega ehk maailm otsa veel ei saa.
Katse tulemuseks oli lihtne kommentaaride leht,mis kuvab kommentaare ja lubab uusi juurde lisada. Kui kommentaar püütakse lisada ilma sisuta, siis antakse veateade. Tulemus on midagi sellist.

Toodud ekraanpaugul on näha, et üks kommentaar on õnnestunult sisestatud ja teise korral tuli viga, sest ma jätsin kommentaari sisu tühjaks.
Razori failid
Razori failid on ehk tuttavad neile, kes Microsofti kunagi ammu väljaantud IDE-t nimega Web Matrix on kasutanud. Selle peal kirjutati enamasti ASP.NET lehti selliselt, et lehtede taga olev kood paiknes lehe enda failis, mitte code-behind failis.
Razoril on hetkel olemas kaks erinevat failitüüpi – cshtml ja vbhtml laiendiga. Kes .NET keeltega kursis, arvab vist kohe ära, millega on tegemist. cshtml on nende failide jaoks, kus on C# keelena kasutusel. vbhtml on Visual Basicu jaoks. Kas tuleb ka F# tugi – ei oska veel öelda.
Kõrval oleval pildil on näha see, kui lihtne ja lakooniline minu veebirakenduse failide struktuur on. Selle lihtsuse hind on paraku see, et mahukamaid veebirakendusi me paraku sellisel kujul struktureerida ei saa.
Väljundiga samadesse failidesse pistetud äriloogika ja selle kasutamine tähendab seda, et rakenduse katmine automaatsete testidega muutub küllaltki keerukaks ja toob endaga varem või hiljem kaasa ulatuslikke muudatusi.
Mahukamad rakendused – kasutagu nad midagi iganes – kirjutame siiski Visual Studio täisversioonide või kui kannatab, siis miks mitte tasuta versioonide peal.
Kommentaaride fail
Kommentaaride fail näeb välja selline, nagu toodud järgmisel ekraanpaugul. Tegin selle pildina, sest head syntax highlight vahendit mul Razori ja WebMatrixi jaoks pole praegu. Et lahendus niigi triviaalne, siis ma eriti ei usu, et keegi seda ka kopeeri-pasteeri meetodil haarata sooviks.

Olulisemad tähelepanekud toodud faili uurides võiksid olla sellised:
- tüüpilise <% … %> asemel on kasutusel @{ … }, mis muudab just vaate väljundi osa palju selgemini loetavaks, kui see on täna,
- vaate atribuudid antakse lehe alguses suhteliselt vabas vormis,
- andmete kirjutamisel väljundisse kasutatakse <%= %> asemel palju lihtsamat süntaksit: @muutuja,
- andmete kontrollimisel ja veateadete kuvamisel kasutatakse ASP.NET MVC raamistikule omaseid või selle omadega sarnaseid klasse ja meetode,
- andmebaasiga suhtlemisel ei kasutata tüüpilisi ADO.NET klasse, vaid SQL Server CE 4.0 omi (SQL Server CE 4.0 klassid asuvad Microsoft.Data nimeruumis, vastava DLL-i leiab GAC-ist ja selles on päris huvitav ringi surfida),
- kes ise julgeb ka proovida, see leiab, et WebMatrixi IDE on veel küllaltki toores ja kohati veidikene ebamugav (teadaolevad probleemid lahenevad täisversiooni tulekuks, kui mitte varem).
Andmebaas
Andmebaasis on mul kommentaaride jaoks lihtne tabel, kus on väljad kommentaari ID, sisu ja lisamise kuupäeva jaoks. Ei midagi keerukat ega sügavamõttelist.

Tabelit luues avastasin midagi päris kummalist – kui tabel on korra salvestatud, siis enam sinna NOT NULL tingimusega välju lisada ei lubata. Seda isegi siis, kui väljale on vaikeväärtus määratud.
Kokkuvõtteks
Nagu nägime saime hakkama päris lihtsa vaatega, mis teeb ära kõik vajaliku. Kuigi kõik oli lihtne, peaks olema hästi arusaadav ka see, et keerukamad vaated muutuvad päris mahukaks koodilt ja kõike samas failis enam hoida ei saa. Kes soovib Razoriga lähemat tutvust teha, siis huvilistele on saadaval ka esmane WebMatrixi dokumentatsioon.
