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:
Zverejnenie komentára