lørdag den 14. juli 2012

Det smarte, smukke og lækre i MVC 3 (og MVC 4)


Hvis man er helt ny i webverdenen og lige skal til at lære omkring state-handling og vænne sig til at du ikke har en model bagved der altid er tilgængelig, og du ikke blot kan smide dine objekter ind i dine kontroller og få dem overført frem og tilbage, så er webforms et meget nemt og ligetil valg for dig.

Men nu har jeg efterhånden rodet lidt i begge verdener og vil sige jeg bliver bare mere og mere glad for MVC 3. Der er (ligesom med alting andet) noget man skal lære og sætte sig ind i, men det er ikke så slemt og når du førs begynder at grave dig ind i det og forstå tankegangen bagved så er det så smukt.

Jeg er ved at udvikle min side csharpudvikler.dk, og her vil jeg have nogle flere specifikke profiler at præsentere, ikke kun udvikler, personlig og professionelt - men også applikations og webudvikler - måske software engineer eller lign.
I første omgang vil jeg gerne lave en Controller der hedder Systemudvikler (csharpudvikler.dk/Systemudvikler/), med en Index-action der skal præsentere alle de forskellige profiler jeg ønsker at præsentere.

Dette kan også sagtens lade sig gøre i webforms, men der er nogle ting der er lidt anderledes og for mig ikke så lækker. I webforms ville man lave en repeater som udskrev det samme, men jeg føler nu mere i MVC jeg har større kontrol da det hele sker i viewet.
Det sjove er at jeg (ligesom ret mange andre) sagde engang det er lidt underligt at folk får det sådan fordi det jo ligner hinanden ret meget, men dengang jeg sagde sådan var min erfaring indenfor MVC også kun at kradse overfladen og slet ikke gået i dybden som nu.
Fx noget af det jeg elsker er at jeg nu vil kunne lave et specificeret view der viser detaljerne for den enkelte profil som fx csharpudvikler.dk/Systemudvikler/Profil/Webudvikler vil vise detaljerne for denne profil-type og være linket fra min oversigt - csharpudvikler.dk/Systemudvikler/ - som tidligere nævnt.

Syntaksen gør det så nemt og behageligt at arbejde med, og nu når du skal have lister indeni lister så er alting meget nemmere.
Jeg har fx i min side Dotwest.net på min kompetence-side viser jeg nogle streger for at vise hvilket niveau jeg er på. Fordi farverne skifter efter hvor langt op den kom løste jeg det ved at lave en repeater i en repeater - og det kan lige pludseligt blive lidt langhåret hvis man ikke adskiller tingene godt og får kommenteret godt og grundigt.

På samme måde i uddannelse bruger jeg også repeater i repeater.
Jeg har en repeater der laver hver gruppe, og så en indeni der laver detaljerne.
Således man for hver kategori laver først overskriften, en ny div og indsætter en repeater indeni denne for at lave de uddannelser indenfor denne kategori.

Det jeg synes så godt om er at når man først forstår principperne i MVC så er det bare meget nemmere at du ikke skal lave kontroller indeni kontroller som du har svært ved at holde styr på, men i stedet så laver du nogle beskrivende objekter i din model som det giver mening at udsende i sit view og pludseligt så beskriver dit markup i samarbejde med dine objekter fra din model hvad du gør og hvad der sker og hvad det rent faktisk er du arbejder med og på hvilken måde.
Det er (i hverfald for mig) lang mere beskrivende end webforms og simpelt fordi du fokuserer ikke på at wrappe dine ting ind i kontroller, men har selv hundrede procent styr på hvad der sker hvor og hvorfor og hvordan fordi det er dig der beskriver det.

Fx hvis man ser på mit eksempel før.
csharpudvikler.dk/Systemudvikler
Denne url skal bruge Controlleren Systemudvikler, og action Index.
Her vil jeg kort præsentere profilerne, og så kan man læse nærmere i den detaljerede profilbeskrivelse.
I denne benytter jeg en model der har en liste af profil-objekter der hver især beskriver alt omkring den enkelte profil-type.
Så jeg laver først en liste over alle profil-objekter, smider i en liste og sætter ind i modellens objekt som jeg smider ind i viewet og denne forstår denne model således jeg direkte kan tilgå denne liste i mit view.

csharpudvikler.dk/Systemudvikler/Profil/{profileType}
Her finder jeg den enkelte profil, og sender denne videre til et detaljeret view. Dette er blot to forskellige modeller af til forskellige visninger, den ene er en liste af profil-objekter og den anden er "blot" profil-objektet og hver især sendes de enkelte "modeller" videre til viewet som kan arbejde med dem i deres respektive context.

Derfor jeg er så glad for MVC nu jeg har fået fingrene ned i det og lært at bruge det, for det er meget mere gennemskueligt hvad der sker hvor, hvornår og hvorfor fordi det er dig selv der beskriver og definerer alting når du og hvordan du har brug for det.

Dengang jeg selv startede med webforms synes jeg ikke det var et dårligt valg fordi nu kan jeg også sige jeg er stærk i det, hvilket der stadig er behov for mange steder - men hvis jeg ikke havde arbejdet med denne del af ASP.NET 4.0 også kunne jeg ikke sige direkte hvorfor jeg gerne ville have det ene frem for det andet, eller hvad fordele og ulemper er, hvad forskellene er og hvordan ting skal gøres anderledes.
Så hvis man har tiden til at kunne lære webforms synes jeg selv det er et fint valg og specielt hvis man kommer fra mere regulær applikationsudvikling hvor din tankegang er en helt anden end webudvikling, men hvis du har fin forståelse for denne verden med request/response, session og jeg-skal-gi-dig-ska-jeg så start med MVC for der er ret mange af mine kolleger der har været fortaler for det uden helt at kunne overbevise mig om hvad det smarte og smukke er i MVC og hvorfor det er bedre end webforms, men det kan jeg selv nu se. Jeg har set lyset, og jeg tror egentligt også at de fleste vil kunne se det efter at have fået fingrene ned i det og set fordelene i dit daglige udvikler arbejde.
Det er ligesom at de fleste også er ret glade for jQuery når de begynder at vænne sig til at arbejde med det og forstå hele princippet omkring javascript, hvilket heller ikke er helt nemt hvis det ikke er en verden man er vant til. Objekter uden typer og ingen syntaks tjek og alt hvad man ellers er vant til når man udvikler i C# og .NET, men igen det er godt at lære noget nyt og anderledes for det tvinger dig til at se din egen kode, udvikling og verden i et nyt lys og tage nogle ting op til revurdering og tror det er sundt. Man udvikler sig og finder måske ud af noget du kan benytte andre steder end kun lige der.

Jeg er i hvertfald glad for alt det nye jeg har lært og som jeg er ved at lære nu også, for det gør jeg ser tingene på en anden måde og så er der også det lille aspekt at jeg jo elsker at lære så det er bare fint.


Ingen kommentarer:

Send en kommentar

Kan du lide mit indlæg, har en kommentar, forslag eller andet på hjerte så skriv venligst