nedeľa 18. januára 2009

Porovnanie ASP.NET WebForms a ASP.NET MVC

Už dlhšie ako rok je v ASP.NET komunite témou číslo jedna pripravovaný framework ASP.NET MVC.
Moje porovnanie nepopisuje rozdiely na implementačnej ale na vyššej úrovni, na úrovni architektúry. Vzor Model View Controller (MVC) nie je v skutočnosti ničím novým. Prvý krát bol popísaný v roku 1979 a v Java komunite je velmi populárny už mnoho rokov. Len pre zaujímavosť, Microsoft v roku 2003 vnímal vzor MVC trochu inak a jeho implementáciu v ASP.NET si predstavoval takto.

Pre komplexné pochopenie rozdielov medzi ASP.NET WebForms a ASP.NET MVC je podľa môjho názoru potrebné pozrieť sa na vec z rôznych pohľadov:

Typ architektúry

  • pull-based architecture (ASP.NET WebForms) - požiadavka prichádza na view, ten inicializuje natiahnutie (pull) dát

  • push-based architecture (ASP.NET MVC) - požiadavka príde na controller, ten inicializuje natiahnutie dát, vyberie view a dáta "natlačí" (push) do view


Typ webového frameworku

  • komponentové frameworky (ASP.NET WebForms, JSF) - treba v nich riešiť 2 problémy:
    - kam serializovať viewstate
    - výpočtová náročnosť vytvorenia komponentového stromu
    Komponentové frameworky sú vhodnejšie pre intranetové aplikácie využívajúce databázu, pretože poskytujú vyššiu úroveň abstrakcie nad protokolom HTTP.
  • požiadavkami riadené frameworky (ASP.NET MVC, Struts, Spring MVC) - sú vhodnejšie tam, kde je potrebné mať úplnu kontrolu nad výstupom


Komponentové frameworky sú o poschodie vyššie ako požiadavkami riadené z pohľadu abstrakcie ktorú ponúkaju, samozrejme niečo to stojí. V extrémnom prípade sa pri použití komponentového frameworku nemusíme starať o to, že existuje nejaký protokol HTTP alebo jazyk HTML. Dobrá úvaha o webových frameworkoch je tu.

O ASP.NET MVC si treba uvedomiť:

  • je to alternatíva a nie náhrada za WebForms

  • poskytuje viac kontroly nad <html/>

  • je to jednoducho testovateľný framework (testovanie WebForms bolo veľmi komplikované – HttpContext mocking)

  • je jednoducho rozšíteľný framework

  • nie je pre každného (WebForm-oriented mindset is unuseable)


Čo sa zmenilo v porovnaní s ASP.NET WebForms:

  • žiaden ViewState

  • žiaden Postback

  • nevyužívame page lifecycle

  • nevyužívame Controls (veci odvodené od System.Web.UI.Control až na zopár výnimiek)

  • SEO friendly URL

  • <form runat="server"> ... </form> nie je nutný atribút runat


Na záver otázka: Kam zaradiť ASP.NET MVC vzhľadom na úroveň abstrakcie nad protokolom HTTP a jazykom HTML?

ASP < ASP.NET MVC < ASP.NET WebForms

Žiadne komentáre: