Štěpán Bechynský: Razor – alternativa k PHP ve výuce?

pátek 23. července 2010 ·

Vzdělávání dospělých a poslední dobou i studentů na všech stupních škol se věnuji patnáctým rokem. Začínal jsem jako lektor v malém školicím středisku v Praze a nyní pracuji jako Developer Evangelist ve společnosti Microsoft. Tím, že žiju ve světě IT a potkávám se převážně s profesionálními vývojáři nebo studenty IT oborů, tak byl pro mě střet se školskou realitou dost drsný. Po mnoho rozhovorech se studenty základních a středních škol a zejména po rozhovoru se zástupcem Jednoty školských informatiků jsem pochopil, že je vše jinak, než si ve své slonovinové věži myslím.

Jak jsem pochopil, díky nízké hodinové dotaci na IT se studenti jakž takž naučí používat počítač a pokud dojte na tvorbu webových stránek, tak je omezena na základy HTML. Student, který má zájem naučit se vytvářet dynamické stránky, je odkázán na volitelné předměty, zájmové kroužky, kamarády nebo samostudium. Ve většině případů pak končí u PHP, protože je velmi jednoduché na pochopení a naučení se. Zájemce o výuku PHP se v podstatě nikdy nedostane do rukou profesionálního lektora, který má kromě lektorských zkušeností i praktické zkušenosti s reálnými PHP projekty a pak to dopadne většinou špatně.

Díky jednoduchosti PHP má každý, kdo si přečetl knížku Jirky Koska, pocit, že je PHP programátor a já nebyl před 10 lety jiný a když si vzpomenu na svůj první PHP projekt, tak bych nad sebou plakal. Vezměme například útok pomocí SQL Injection. Většinou se dozvíte, že je třeba ve vstupu od klienta zaměnit ‘ za ‘’. To většina udělá tam, kde očekává text, ale málo kdo, už to kontroluje tam, kde očekává číslo. Uživatel přece nebude tak hloupý, aby někam psal text, když tam má být číslo. Pak se nemůžeme divit, že SQL Injection stále existuje. Tento problém řeší například parametrizované dotazy, které začátečník nepoužije, protože je to moc psaní a často se o něčem takovém vůbec nedozví. Tak bych mohl pokračovat dál například s validací vstupních údajů, recyklací spojení s databází, šablonovacími systémy, URL odpovídající SEO, atd. Všechno to v PHP samozřejmě jde, ale pro začátečníka je to už za hranicí jednoduchosti a u lektorů-nadšenců často za hranicemi znalostí.

Proto vznikla nová syntaxe pro ASP.NET, která se jmenuje Razor a je primárně určena pro začínající programátory a rychlou tvorbu jednoduchých dynamických stránek. Razor klade v prvé řadě důraz na bezpečnost „by design“. Jednoduchý příklad:

var Price = Request["Cena"];
if (Price.IsEmpty()) {
Validation.AddFieldError("Cena", "Zadejte cenu.");
}
var db = Database.OpenFile("SmallBakery.sdf");
if(Validation.Success) {
var insertQuery = "INSERT INTO Products (Name, Description, Price) VALUES (@0, @1, @2)";
db.Execute(insertQuery, Name, Description, Price);
}

Kód načte hodnotu parametru cena, ověří, zda byla cena zadána a pak vloží nový záznam do databáze. Dotaz je parametrizovaný, nehrozí tedy SQL Injection, navíc je spojení s databází automaticky otevřeno a zavřeno ve vhodný čas a používá se takzvaný connection pooling. Těchto pár řádků je snadné vysvětlit, naučit se je, pochopit je a zároveň mám bezpečný kód „by design“.

Syntaxe Razor se dále snaží o maximální jednoduchost. Například šablonovací systém, který umožňuje snadno zachovat jednotný vzhled stránek, je přímo součástí syntaxe Razor, takže není nutné cokoliv nastavovat nebo instalovat. Konstrukce @{} odpovídá <?php ?>.

Stránka s obsahem:

@{
    LayoutPage = "_layout.cshtml";
}
@section header {
    <div id="header">
        Chapter 3: Creating a Consistent Look
    </div>
}
@section list {
    <ul>
        <li>Lorem</li>
        <li>Ipsum</li>
        <li>Dolor</li>
    </ul>
}
<h1>Multisection Content</h1>
<p>Lorem ipsum dolor sit amet.</p>


A přílušná Layout Page (_layout.cshtml) takto:

<!DOCTYPE html>
<html>
    <head>
      <title>Multisection Content</title>
     </head>
    <body>
      <div id="header">
        @RenderSection("header")
      </div>
      <div id="list">
        @RenderSection("list")
      </div>
      <div id="main">
        @RenderBody()
      </div>
      <div id="footer">
        &copy; 2010 Contoso Pharmaceuticals. All rights reserved.
      </div>
    </body>
</html>


Metoda RenderBody() vykresluje nepojmenovanou sekci a jednotlivé sekce lze nastavit jako volitelné. K dobré čitelnosti kódu svým způsobem přispívá i použití principů objektového programování v syntaxi Razor a možnost „in-line“ zápisu kódu:




Razor @{
    var db = Database.OpenFile("Northwind.mdf");
}
<table>
  <tr>
    <td>Company Name</td>
    <td>Contact Name</td>
    <td>Contact Title</td>
    <td>Address </td>
  </tr>
  @foreach (var row in db.Query("SELECT * FROM Customers")) {
    <tr>
      <td>@row.CompanyName</td>
      <td>@row.ContactName</td>
      <td>@row.ContactTitle</td>
      <td>@row.Address</td>
    </tr>
  }
</table>
PHP <table>
  <tr>
    <td>Company Name</td>
    <td>Contact Name</td>
    <td>Contact Title</td>
    <td>Address </td>
  </tr>
  <?php
    mysql_connect('localhost', 'mysql_user', 'mysql_password');
    $result = mysql_query("SELECT * FROM Customers");
    while ($row = mysql_fetch_assoc($result)) {
      echo '<tr>'
      echo '<td>'.$row['CompanyName'].'</td>';
      echo '<td>'.$row['ContactName'].'</td>';
      echo '<td>'.$row['ContactTitle'].'</td>';
      echo '<td>'.$row['Address'].'</td>';
      echo '</tr>'
    }
  ?>
</table>

Závěr

Podle mého názoru syntaxe Razor je stejně jednoduchá na naučení se, jako PHP, ale přináší „by design“ bezpečnost a dobrou čitelnost kódu. Tím, že je Razor postaven na ASP.NET, je přechod na „normální“ .NET jednoduchý a studentům se tím otevírají i takové možnosti, jako je programování robotů nebo herní konzole XBox 360. Navíc příprava počítače je díky nástroji Web Platform Installer otázkou několika minut. Pokud by byl ze strany vyučujících zájem, můžeme připravit výukové materiály v češtině. Více informací najdete na http://www.asp.net/webmatrix.

1 komentářů:

Libor Klubal řekl(a)...
27. července 2010 v 11:01  

Diskuse ohledně výuky programování na středních školách probíhají stále. Každý, kdo s programování pokročil do profesionální sféry se dívá po nějaké době podívá na výuku začátečníků a základů prg a kritizuje. Ale nezačínal každý z profesionálů právě u toho jednoduchého, které mu pomohl pochopit základní algoritmické struktury? Jak vůbec funguje zobrazování stránek pomocí HTML? Co jsou to vlastně kaskádové styly? Jak on ten server zpracuje skript? Všechno je nutné pochopit na tzv. laické úrovni a pak teprve můžu přistoupit k jiným nástrojům. Jinak se celé programování zvrhne na "vezmu tenhle kousek kódu z příkladu a změním v něm tenhle řádek, ono to bude nějak fungovat".
Ve vašem příkladu používáte cyklus, ale jak jej studentům (žákům) vysvětlit? Tady je na místě co možná nejjednodušší nástroj, aby příklad hned fungoval bez složitého rozhraní atp.
Je jasné, že učitel musí upozornit na jednoduchost použitých nástrojů a mít přehled (ne detailní znalost) nových technologií. Ale opravdu nelze ihned skočit na robustní nástroje a vynechat základy. Vždyť analýza funkce se dá taky krásně a lépe provést pomocí deferenciálního počtu, ale jak na něj, když neznáme násobilku?

Články dle data



Učitelské listy

Nabídka práce

Česká škola - portál pro ZŠ a SŠ

Česká škola poskytuje svým čtenářům diskusní prostor k vyjádření názorů na školskou problematiku. Tyto příspěvky se nemusí shodovat se stanoviskem redakce České školy a jsou uveřejňovány jako podnět k dalším diskusím.

Obsah článků nemusí vyjadřovat stanovisko redakce nebo vydavatele Albatros Media, a.s.


Všechna práva vyhrazena.

Tento server dodržuje právní předpisy
o ochraně osobních údajů.

ISSN 1213-6018




Licence Creative Commons

Obsah podléhá licenci Creative Commons Uveďte autora-Neužívejte dílo komerčně-Nezasahujte do díla 3.0 Česká republika, pokud není uvedeno jinak nebo nejde-li o tiskové zprávy.



WebArchiv - archiv českého webu



Tyto webové stránky používají k poskytování služeb, personalizaci reklam a analýze návštěvnosti soubory cookie. Informace o tom, jak tyto webové stránky používáte, jsou sdíleny se společností Google. Používáním těchto webových stránek souhlasíte s použitím souborů cookie.