Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Podřízne Razor PHP?

Možná jste zaznamenali vznik nového engine pro ASP.NET s názvem Razor (na Zdrojáku o něm vyšla zprávička. Poměrně nenásilným způsobem kombinuje HTML stránky s jazyky, používanými ve světě .NET, tedy především C# a VB.NET. Má tato kombinace šanci vystřídat PHP na postu „nejjednoduššího jazyka pro vytváření server backendu“?

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

Tento článek je můj subjektivní názor na novou syntaxi Razor (http://www.as­p.net/webmatrix) pro ASP.NET, který je ovlivněn patnácti lety, kdy se věnuji vzdělávání dospělých v IT, 11 lety vývoje aplikací, frustrací z jednoho projektu a samozřejmě i mou prací na pozici Developer Evangelist. – pozn.aut.

Razor – první pohled

Když jsem se poprvé setkal s novou syntaxí pro ASP.NET, tehdy ještě označovanou jako Plan9, byl jsem vcelku zděšen a vrátil jsem se o deset let zpět, kdy jsem programoval portál www.ipoint.cz v PHP. Jednalo se o klasický živelný vývoj bez koncepce, kdy jsem funkce přidával podle rozmarů zadavatele a počasí, a vše se měnilo ze dne na den. Na druhou stranu po čase byl portál přepsán od základů, nikým jiným než Jakubem Vránou, a funguje velmi úspěšně dodnes.

Když se na toto období podívám zpětně, tak to byla z mé strany přehlídka amatérismu v tom nejhorším slova smyslu. Všechno běželo na jednom jediném počítači, neexistovalo testování, o správě zdrojového kódu jsem neměl ani ponětí, a díky PHP to byl spaghetti kód jako prase, plný dvířek, vlastně vrat, pro SQL Injection. Změnu designu jsem musel dělat pomocí nástroje sed, protože šablonovací systém jsem nahradil stylem copy & paste. A proč to tak vypadalo?

PHP, tehdy verze 3, mi v podstatě nedávalo nástroje pro čistší styl vývoje, navíc informace o tom, jak dělat rozsáhlé aplikace v PHP, v podstatě neexistovaly. Naštěstí jsem místo MySQL použil PostgreSQL, a tím se vyhnul dalším problémům (než mě začnete kamenovat – potřeboval jsem transakce a úložné procedury, a o tom se v té době MySQL ani nezdálo. Na to by byl už lepší Access). Ono se vlastně stačí i dnes podívat do knížek pro začínající programátory v PHP. O parametrizaci SQL dotazů, kterými se na sto procent vyhnete SQL Injection, o technice connection pooling nebo o šablonovacích systémech se nedozví začátečník vůbec nic, a přitom jsou to věci velmi snadné na naučení i pochopení.

Razor – jeden a půltý pohled

Do našeho oddělení chodí během období maturit na praxi studenti z nižších ročníků středních škol, kterým zadáváme různé práce – většinou překládají technické články z angličtiny. Protože jsem byl ze syntaxe Razor vcelku rozčarován, jednoho studentíka, nepoznamenaného programováním, jsem si vzal jako pokusného králíka, jestli bude Razor fungovat tak, jak byl zamýšlen.

Zásadní problém ASP.NET vs. PHP je takzvaná křivka učení. Když chci začít dělat stránky v PHP, tak mi stačí se naučit relativně málo a jsem schopen něco udělat. U ASP.NET je třeba se toho naučit a pochopit relativně dost, než je člověk schopen udělat svoji první stránku, a to začátečníky velmi odrazuje. Základní myšlenka syntaxe Razor je využití ASP.NET co nejjednodušším způsobem pomocí takzvaných helpers (pomocníků), umožnit začátečníkům rychle napsat svoji první aplikaci, a přitom se toho muset co nejméně naučit.

Studentík se upsal spolužákovou krví, že o Plan9 ani nepípne, jinak přijde do pekla, a začal se sám učit. Řekl bych, že vývoj byl stejný, jako by se učil PHP, ale výsledek byl jiný. Spaghetti kód z principu věci zůstal, ale největší problémy začátečníků, jako je bezpečnost, neefektivní práce s databází a opakování kódu, nikde. Proč?

Razor – druhý pohled

 Razor kompletně využívá ASP.NET, ale většinu běžných činností, jako je například výpis dotazu z databáze, maximálně zjednodušuje pomocí helpers. Nejedná se o nic jiného než o vysokoúrovňové objekty, které zapouzdřují práci s databází, s Twitterem, s validací dat, s ReCaptcha, s Google Analytics atd. Součástí jsou i helpers  pro jednoduchý šablonovací systém, který vychází z Master Pages v ASP.NET, ale je opět zjednodušen.

Co mě docela zaujalo, je využití systému událostí, který činí začátečníkům v ASP.NET vcelku velké potíže. Ze všech událostí, které poskytuje ASP.NET, se vybralo pár, které jsou nahrazeny speciálně pojmenovanými soubory. Potřebuji-li například pro všechny soubory v jednom adresáři nastavit společnou šablonu (Layout Page), stačí vytvořit soubor _init.cshtml a v něm šablonu nastavit. Tento soubor se vykoná dřív než vlastní stránka s obsahem, a proto ji může ovlivnit.

Validace vstupních údajů

Na naprostou nutnost validovat vstupní údaje se v plno materiálech pro začátečníky zapomíná, nebo je toto téma zmíněno velmi okrajově. Razor poskytuje několik velmi jednoduchých metod, které validaci údajů od klienta usnadňují. Příkazem

var Price = Request["Price"];

 získáme hodnotu proměnné Price z požadavku klienta (GET, POST). Pomocí metody IsEmpty(), zjistíme, zda uživatel hodnotu vyplnil. Objektem Validation pak můžeme nastavit chybové hlášení:

if (Price.IsEmpty()) {
   Validation.AddFieldError("Price", "Product price is required.");
}

Pokud potřebujete zkontrolovat datový typ, tak stačí použít příslušnou „Is“ metodu, např. IsDateTime() a pomocí metody „As“ provézt příslušnou konverzi, např. AsDateTime().

Práce s databází

Co mě docela zaujalo, je možnost využití SQL Server Compact Edition 4. Jde o malou „embedded“ databázi, která na většinu projektů bude stačit, je kompatibilní s Microsoft SQL Server 2008, a tím pádem je přechod na „velkou“ databázi velmi snadný. Navíc nemusíte řešit nastavení databáze u hostera, protože si ji projekt nese sebou včetně „serveru“. Pokud budeme pokračovat v předchozím příkladu, práce s databází bude vypadat následovně:

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);
}

Dotaz je parametrizovaný (@0, @1, @2) a navíc se automaticky využívá connection pooling, který lépe využívá spojení s databází.

Šablonovací systém

Pomocí Layout Pages můžete velmi snadno vytvářet šablony. Stránka s obsahem se na začátku odkazuje na svoji Layout Page, která říká, jak se vykreslují jednotlivé sekce s obsahem. Stránka s obsahem může vypadat například takto:

 @{
    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>
        <li>Consecte</li>
        <li>Eiusmod</li>
        <li>Tempor</li>
        <li>Incididu</li>
    </ul>
}
<h1>Multisection Content</h1>
<p>Lorem ipsum dolor sit amet.</p>

A přísluš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é.

Pěkná URL

Naprosto běžnou záležitostí současných webů je používání „pěkných“ URL. Tuto vlastnost má Razor „by design“. Pokud sestavíte například adresu http://www.muj­server.cz/blog/201­0/leden, tak se nejdříve bude hledat stránka blog.cshtml, pokud se najde, tak dostane jako parametr hodnoty 2010 a leden, ke které najdete v poli UrlData. Pokud se nenajde, bude se hledat 2010.cshtml v adresáři blog, atd.

Anketa

Co říkáte na Razor?

       

Razor – co s tím?

Z původního zděšení nastalo příjemné překvapení. Pokud se na syntaxi Razor podívám očima začátečníka, tak se jedná o velmi jednoduchý systém na úrovni PHP, a pokud se na to podívám jako programátor s mnohaletou praxí, tak se jedná o systém, který od začátku nutí k dodržování základních bezpečnostních pravidel a dává nástroje pro čistý kód, a to jak jen to je ve světě špaget možné. Začátečník pak může navíc snadno přejít ze syntaxe Razor na normální .NET, který otevírá podstatně více možností než PHP. Například programovat jednočipové počítače, mobilní telefony nebo XBox 360.

Autorem článku je Štěpán Bechynský, specialista pro vývojové nástroje ve společnosti Microsoft v České republice. Informace pro vývojáře také najdete na blogu odborníků z českého Microsoftu.

Štěpán Bechynský

Specialista pro vývojové nástroje ve společnosti Microsoft v České republice.

Školení Google+ pro firmy

DW - Školení PPC
  • Jak využít Google+ pro firemní komunikaci a marketing.
  • Čím se liší Google+ od Twitteru a Facebooku z pohledu firemního využití.
  • Jak využít Google+ v souladu s pravidly užívání.
  • Založení Google+ Page (Stránky) krok po kroku, včetně praktických tipů.

Detailní informace o školení Google+ »

Přehled názorů

Veřejné přiznání
Miloslav Ponkrác 26. 7. 2010 00:32
Nový
├ 
Re: Veřejné přiznání
MareceK 26. 7. 2010 01:18
Nový
└ 
Re: Veřejné přiznání
Pepa Von Depo 26. 7. 2010 11:51
Nový
 
├ 
Re: Veřejné přiznání
Petr Bíža 26. 7. 2010 13:38
Nový
 
├ 
Re: Veřejné přiznání
ondrah 26. 7. 2010 15:54
Nový
 
└ 
Re: Veřejné přiznání
blizzboz 27. 7. 2010 12:12
Nový
Rozšíření Razoru brání jediná věc...
Martin Malý 26. 7. 2010 09:25
Nový
├ 
Re: Rozšíření Razoru brání jediná věc...
KapitánRUM 28. 7. 2010 01:25
Nový
│
└ 
Re: Rozšíření Razoru brání jediná věc...
Franta Kučera 28. 7. 2010 14:54
Nový
├ 
Re: Rozšíření Razoru brání jediná věc...
Michal Augustýn 28. 7. 2010 08:55
Nový
└ 
Re: Rozšíření Razoru brání jediná věc...
Tomáš J. Kouba 28. 7. 2010 14:40
Nový
 
└ 
Re: Rozšíření Razoru brání jediná věc...
tom 29. 7. 2010 15:10
Nový
 
 
├ 
Re: Rozšíření Razoru brání jediná věc...
Franta Kučera 29. 7. 2010 15:25
Nový
 
 
└ 
Re: Rozšíření Razoru brání jediná věc...
Jozef Ševčík 29. 7. 2010 15:54
Nový
 
 
 
└ 
Re: Rozšíření Razoru brání jediná věc...
Michal Augustýn 30. 7. 2010 15:53
Nový
 
 
 
 
└ 
Re: Rozšíření Razoru brání jediná věc...
Jozef Ševčík 30. 7. 2010 20:53
Nový
 
 
 
 
 
└ 
Re: Rozšíření Razoru brání jediná věc...
Michal Augustýn 30. 7. 2010 22:17
Nový
 
 
 
 
 
 
├ 
Re: Rozšíření Razoru brání jediná věc...
Franta Kučera 30. 7. 2010 22:54
Nový
 
 
 
 
 
 
│
└ 
Re: Rozšíření Razoru brání jediná věc...
Michal Augustýn 30. 7. 2010 23:02
Nový
 
 
 
 
 
 
├ 
Re: Rozšíření Razoru brání jediná věc...
Jozef Ševčík 31. 7. 2010 00:06
Nový
 
 
 
 
 
 
└ 
Re: Rozšíření Razoru brání jediná věc...
Jozef Ševčík 31. 7. 2010 00:23
Nový
Razor podreze maximalne tak sam sebe...
isnotgood 26. 7. 2010 17:12
Nový
└ 
Re: Razor podreze maximalne tak sam sebe...
Petr 26. 7. 2010 17:21
Nový
 
└ 
Re: Razor podreze maximalne tak sam sebe...
Franta Kučera 26. 7. 2010 19:24
Nový
 
 
└ 
Re: Razor podreze maximalne tak sam sebe...
V. Šetka 26. 7. 2010 21:31
Nový
 
 
 
└ 
Re: Razor podreze maximalne tak sam sebe...
Franta Kučera 26. 7. 2010 22:10
Nový
 
 
 
 
├ 
Re: Razor podreze maximalne tak sam sebe...
andy 27. 7. 2010 21:53
Nový
 
 
 
 
└ 
Re: Razor podreze maximalne tak sam sebe...
V. Šetka 28. 7. 2010 14:44
Nový
php3
honza 26. 7. 2010 20:25
Nový
├ 
Re: php3
Libor Šedivý 26. 7. 2010 22:44
Nový
│
└ 
Re: php3
blizzboz 27. 7. 2010 12:04
Nový
│
 
└ 
Re: php3
honza 27. 7. 2010 20:58
Nový
└ 
Re: php3
blizzboz 27. 7. 2010 12:17
Nový
 
└ 
Re: php3
honza 27. 7. 2010 20:45
Nový
No mnohem zajímavější by bylo,
Ivan Nový 26. 7. 2010 23:05
Nový
├ 
Re: No mnohem zajímavější by bylo,
Jozef Ševčík 26. 7. 2010 23:13
Nový
│
└ 
Re: No mnohem zajímavější by bylo,
Tomáš Herceg 27. 7. 2010 11:11
Nový
│
 
├ 
Re: No mnohem zajímavější by bylo,
Michal Augustýn 27. 7. 2010 17:09
Nový
│
 
│
└ 
Re: No mnohem zajímavější by bylo,
Tomáš Herceg 28. 7. 2010 09:57
Nový
│
 
│
 
├ 
Re: No mnohem zajímavější by bylo,
Michal Augustýn 28. 7. 2010 10:06
Nový
│
 
│
 
└ 
Re: No mnohem zajímavější by bylo,
Ivan Nový 28. 7. 2010 11:24
Nový
│
 
└ 
Re: No mnohem zajímavější by bylo,
Jozef Ševčík 27. 7. 2010 18:28
Nový
│
 
 
├ 
Re: No mnohem zajímavější by bylo,
Michal Augustýn 27. 7. 2010 18:54
Nový
│
 
 
│
└ 
Re: No mnohem zajímavější by bylo,
Jozef Ševčík 27. 7. 2010 19:07
Nový
│
 
 
└ 
Re: No mnohem zajímavější by bylo,
Tomáš Herceg 28. 7. 2010 14:51
Nový
│
 
 
 
└ 
Re: No mnohem zajímavější by bylo,
Jozef Ševčík 28. 7. 2010 18:21
Nový
├ 
Re: No mnohem zajímavější by bylo,
pas 27. 7. 2010 00:02
Nový
│
└ 
Re: No mnohem zajímavější by bylo,
Ivan Nový 28. 7. 2010 16:05
Nový
├ 
Re: No mnohem zajímavější by bylo,
34535 27. 7. 2010 00:09
Nový
└ 
Java a Google Web Toolkit
Franta Kučera 27. 7. 2010 22:07
Nový
špatná terminologie - Razor vs. ASP.NET Web Pages
Michal Augustýn 27. 7. 2010 17:24
Nový
Re: Podřízne Razor PHP?
LamiCZ 27. 7. 2010 18:37
Nový
Plan9
Koubas 2. 8. 2010 04:30
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem