Milan Mikuš

Vývojářský blog Milana Mikuše



Podle kategorie

Možnosti Webového vývoja na .NET Core

Milan Mikuš       26. 2. 2017       ASP.NET/IIS, HTTP/HTML, .NET, JavaScript       3165 zobrazení

Jedna z tém, ktoré sa budú v blízkej budúcnosti asi často objavovať je .NET Core. Jeho multiplatformovosť je veľká výhoda a vo väčšine príkladov Microsoft spomína jeho uplatnenie ako platforma pre nenáročný a spoľahlivý webserver hostovaný napríklad na Linuxe.

Microsoft ale s príchodom .NET Core ohlásil, že ďalej nebude podporovať ASP.NET Web Forms. WebForms má dni svojej slávy už jednoznačne za sebou, ale v Strednej Európe je tento framework stále obľúbený a mnoho veľkých firiem má na ňom postavené svoje interné informačné systémy a webové aplikácie. Podporovaný ale nebude a na .NET Core tým pádom prichádza do úvahy len použiť prezentačný framework ASP.NET MVC, ktorý zostal ako jediná podporovaná webová technológia.

ASP.NET MVC 6, na .NET Core nazvané ASP.NET MVC 1.0 Core prináša niekoľko veľmi príjemých zmien. Aj keď je pomerne komplexný, stále dovoľuje veľkú flexibilitu pri návrhu architektúry webovej aplikácie. Od komplikovaných Controllerov, ktoré sa starajú takpovediac o každý aspekt správania a vzhľadu stránky, až po minimalistické WebAPI, ktoré podporuje základné CRUD operácie a zbytok aplikácie tvorí HTML/Javascript. Už dlhšiu dobu naberajú na popularite javascriptové frameworky ako AngularJS, Knockout, React a Vue a celá zoo ďalších. Tieto frameworky ale žiadnu extra prezentačnú vrstvu na strane servera nepotrebujú, naviac server-side logiku zastane napríklad Node.js. Výsledkom je, že C# akoby vo webovom prostredí strácal pozíciu v prospech JavaScriptu. Oproti tejto konkurencii sa ASP.NET MVC snaží prinášať nové vymoženosti, ktoré by .NET vývojárov  zaujali a uľahčili im život.

Na druhej strane barikády stojí Tomáš Herceg so svojou firmou Riganti, ktorí majú za cieľ ponúknuť alternatívu k MVC. Hľadali nástroj, z ktorého pomocou by dokázali vyvíjať užívateľské rozhrania podobne pohodlne ako vo WPF a naviac bol zrozumiteľný pre programátorov zvyknutých na ASP.NET Web Forms. Svoj framework DotVVM postavili na návrhovom vzore MVVM. Jeho základnú štruktúru tvorí View-model napísaný na strane servera v C# a view v HTML obohatenom o koncept data-bindingov.

MVC je už rokmi vyskúšaný framework, ktorý Microsoft vylepšil a priniesol ako prvú voľbu webového vývoja na .NET Core. Naproti tomu DotVVM je novinka, ktorá je vo vývoji necelé dva roky a zdanlivo ide proti prúdu: snaží sa minimalizovať písanie JavaScriptu a má plnú podporu pre .NET Core. Samozrejme celý kód je otvorený a do projektu je možné prispieť na GitHube. Myslím, že stojí za to si ho predstaviť ako sľubnú alternatívu.

Štruktúra projektu

porovnanie projektov MVC vs. DotVVM

Oba projekty majú štruktúru, typickú pre .NET Core webový projekt. Rozdelenie do adresárov zodpovedá použitej architektúre. Program.cs a trieda Startup je v obidvoch zhruba rovnaký až na jeden riadok, ktorý nastaví príslušný framework ako middlewere. Pri DotVVM je špecifická konfigurácia vyčlenená do samostatnej triedy, MVC má svoju špecifickú konfiguráciu priamo v súbore Startup.cs. MVC používa ako svoje views súbory s príponou cshtml ktoré sú písané v markupovom jazyku Razor, DotVVM svoje .dothtml views  písané vo vlastnom obohatenom HTML.

Najväčší rozdiel je v tom, ako je v oboch frameworkoch riešený code-behind. Základným stavebným kameňom architektúry MVC je Controller. Je to bezstavová trieda, kde každá metóda odsluhuje jedno volanie na webserver. Jeden Controller obsluhuje viacero stránok a  združuje metódy obsahujúce podobný typ požiadavkov. Metóda príjme dáta poslané na server, spracuje ich, vyberie a vráti správne view, ktorému poskytne dáta na zobrazenie. Controller samotný stavové zmeny na stránke neuchováva, ide o komunikáciu “požiadavka - odpoveď”. Akékoľvek stavové informácie musí programátor “ručne” získať z požiadavky na server.

Naproti tomu DotVVM využíva výhody MVVM. Jeden view-model obsluhuje pri požiadavke na server len jednu stránku. DotVVM View je so svojím view-modelom pevne zviazané. View-model si naprieč požiadavkami uchováva kompletný stav svojej stránky. Takto združuje nielen dáta (properties) s ktorými stránka pracuje, ale aj funkcie. Tie zodpovedajú operáciám, ktoré možno na stránke vykonať, napríklad klik na tlačidlo. Ak užívateľ vykoná na stránke operáciu a spustí sa funkcia vo view-modely, táto funkcia má k dispozícií všetky dáta view-model triedy už pripravené tak, ako ich vidí užívateľ na stránke.

Mapovenie ciest

možnosti mapovania ciest v MVC

ASP.NET MVC Core má bohaté možnosti konfigurácie mapovania požiadaviek na server na akcie príslušných Controllerov. Je možné nastaviť mapovanie priamo v triede Startup.cs a držať si tak celú konfiguráciu ciest pokope. Tiež je možné jednotlivým Controllerom predpísať ich cestu atribútom. To isté platí pre akcie. Platí že atribúty akcií majú väčšiu váhu, ako atribúty Controllera.  Taktiež je možné v atribúte použiť parametre [controller] a [action], ktoré dosadia meno aktuálneho Controllera a akcie.

konfigurácia ciest v DotVVM

Jediná možnosť ako v DotVVM nastaviť mapovanie ciest, je priradiť pomenovanú cestu konkrétnej .dothtml stránke v konfigurácií DotVVM a tak spárovať požiadavku na server so stránkou, ktorá sa má spracovať ako odpoveď. Pridávať cesty ručne by bolo na veľkých weboch pomerne nepraktické, našťastie je možné využiť možnosť rozšíriteľného auto-discovery, ktorá na  základe konkrétnej stratégie .dothtml stránky nájde a namapuje na cesty. Základná stratégia namapuje stránky v priečinku “Views” podľa podpriečinkov.

prístup k parametrom z adresy MVC vs. DotVVM

Aj DotVVM aj MVC podporujú premenné parametre v adrese. Stačí ich uviesť v konfigurácií cesty a oba frameworky sa už postarajú o ich správne mapovanie.

V MVC prídu nachystané so správnym typom do parametrov akcií Controlleru podľa mena a atribútu [FromRoute]. V DotVVM view-modely ich treba získať zo slovníka Parameters objektu Context, ktorý je dostupný na štandardných DotVVM view-modeloch. Správny typ, dostupnosť a názov parametru si ale musí programátor postrážiť sám.

Views

Razor ukážka kódu

Filozofia písania views v MVC by sa dala zhrnúť slovom minimalizmus. Dať programátorovi sadu základných funkcií a nechať ho nech si funkcionalitu stránok tak povediac “od podlahy” navrhne sám. Razor využíva priamu kombináciu C# kódu a HTML, nič neskrýva a tagy vykresluje jedna k jednej. Pri zostavovaní výsledného HTML sa dajú používať takmer všetky konštrukcie zo C# vrátane podmienok a cyklov. Dáta poskytnuté Controllerom na vykreslenie sú prístupné vo vstavanej premennej Model alebo slovníku ViewData. Na najčastejšie používané HTML konštrukcie existujú špeciálne funkcie - HTML helpery, ktoré podľa zadaných parametrov vykreslia HTML do stránky. Ide o jednoduchý priamočiary nástroj bez vnútornej logiky a väčšinou vykresľuje konkrétny HTML tag.

Znovupoužiteľnosť a prenositelnosť kódu zaisťuje špeciálny typ views - Partial views. Ide o typ view, ktorého úloha je vykresliť len časť stránky. Partial view má vlastný model a ViewData. Partial view je možné vykresliť do ľubovoľného iného view, a predať mu kompatibilné dáta. Je možné tiež vrátiť Partial view ako výsledok volania na Controller a dá sa takéto volanie vynútiť pri samotnom zostavovaní view v ktorom sa Partial view používa. Tento mechanizmus je veľmi dobre možné využiť na vytváranie prenesiteľných znovu použiteľných sád Partial view. Views sa zostavujú ako textové súbory priamo bez akejkoľvek klientskej logiky. Nevýhodou je že pri zmene dát alebo požiadavke na server (napr.: odoslaní formulára) dát sa musí spraviť plnohodnotné volanie na server a celá stránka sa musí prekresliť s novými dátami. Dnes takéto priame vykresľovanie chce málokto a logika sa deleguje z Controllera na JavaScript na strane klienta s čím ale ASP.NET MVC príliš nepomôže.

DotVVM markup ukážka kódu

DotVVM má v mnohom filozofiu presne opačnú. Snaží sa čo najviac programátora odbremeniť od písania klientskej logiky v JavaScripte aj za cenu toho,  že pred ním implementačné detaily ukryje. DOTHTML markup ktorým sú views písané sa narozdiel od markupu Razor snaží minimalizovať C# kód v samotnom view. View je písaný v štandardnom HTML rozšírenom o sadu vlastných tagov s prefixom “dot:”. View ktoré navrhujete sa ale bude líšiť od reálne vykreslenej stránky. DotVVM zavádza totiž koncept Controls. Celé view je tvorené kontrolkami, ktoré majú každá svoju vnútornú javascriptovú logiku a definovaný spôsob, akým sa vykesľujú. Do jednoduchých kontroliek ako napríklad TextBox, ktorý vykreslí len jeden <input> tag napojený na view-model, až po komplexné ako napríkad GridView, ktorý vykreslí zo zadanej kolekcie dát z view-modelu tabuľkový prehľad s možnosťou úpravy riadkov, radenia a stránkovania.  Dáta z view-modelu sa do kontroliek vo view jednosmerne alebo aj obojsmerne naviažu pomocou “data-bindingov” vo view. Používa sa na to syntax inšpirovaná desktopovým prezentačným frameworkom WPF. Data-bindingy podporujú jednoduché C# výrazy, ktoré uľahčujú naviazanie dát ale riadenie toku programu a zložitejšie C# konštrukcie nepodporujú.

Výhodou DotVVM je, že pri požiadavke na server sa neprekresľuje celá stránka, ale naspäť sa pošle len zmena view-modelu a prípadne HTML ktoré sa zmenilo. Komunikáciu zo serverom tok dát medzi medzi kontrolkami view rieši DotVVM interne. Dáta view-modelu sú naviac dostupné ako javascriptové objekty takže napojenie vlastnej javascriptovej logiky nie je problém. Okrem využívania kontroliek, ktoré sú súčasťou samotného frameworku je samozrejme možné vytvoriť aj vlastné kontrolieky a zaregistrovať ich v rámci DotVVM, alebo ich distribuovať buď ako knižnicu DLL. To podporuje scenár, kedy skúsený team vývojárov vyvýja sadu všeobecne použiteľných kontroliek zatiaľ čo menej skúsený team ich potom využíva a zostavuje weby podľa požiadaviek zákazníka.

Nevýhodou je, že na pozadí každého view je logika ktorú nie je na prv pohľad vidieť a treba s ňou rátať a porozumieť jej. Dá sa požívať aj ako "black box", ale náročnejšie scénare to už nestačí. Ale framework ako taký stále dokáže ušetriť veľkú časť repetitívneho klientského aj serverového kódu, obzvášť pokiaľ web obsahuje zložitejšie procesy, alebo wizardy.

Záverom

V tomto článku som predstavil základné vlastnosti ASP.NET MVC od Microsoftu a frameworku DotVVM od firmy Riganti ako dve alternatívy pre webový vývoj na .NET core. MVC sa snaží o základnú abstrakciu interakcie so serverom a návrh webu skrze priamočiare a transparentné nástroje a všetko ostatné necháva v rukách programátora.

Ako alternatíva DotVVM sa snaží riešiť čo najviac z bežných úloh pri návrhu “line of business” aplikácií a tak programátorom ušetriť čas a peniaze. Naviac poskytuje dostatočnú modularitu a rozšíriteľnosť.

 

hodnocení článku

0       Hodnotit mohou jen registrované uživatelé.

Mohlo by vás také zajímat

 

Nový příspěvek

 

Příspěvky zaslané pod tento článek se neobjeví hned, ale až po schválení administrátorem.

Zajimavý produkt

Jen škoda, že je licence jen na rok. Jiná volba není. Každý rok dávat necelých 180 USD (s Bootstrapem) no nevím...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

U Boostrap for DotVVM je licence trvalá, během prvního roku máte updaty v ceně, ale knihovna samotná funguje i po vypršení té roční lhůty.

U doplňku do Visual Studia platí, že základní verze je zdarma. Pokročilé funkce jsou placené a tam je to opravdu jen na rok. Nicméně ta lepší IntelliSense ušetří mnoho dost času, takže v konečném důsledku se to vyplatí.

Pokud nám pomůžete (např. nějaký pull request, zajímavé nápady, pomoc s dokumentací) nebo pracujete na nějakém projektu pro školství či charitu, kontaktujte nás a poskytneme Vám licenci zdarma. :-)

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

Příspěvky zaslané pod tento článek se neobjeví hned, ale až po schválení administrátorem.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback