Iteam
GitHub

MVC-ramverk för ASP.NET

Arkitekturen Model - View - Controller, oftast förkortad MVC, uppfanns redan 1979 under arbetet med programspråket Smalltalk. Grundidén är (precis som med många andra arkitekturer) att tydligt separera presentation, affärslogik och data från varandra. Såhär fungerar MVC (ursäkta lite svengelska här och var):

  • Model är den komponent som representerar data och innehåll. Model motsvarar saker i verkligheten, t.ex. produkt, kund eller order.
  • View är den komponent som skapar ett användargränssnitt för en modell. Varje modell kan ha många olika views. Det är viktigt för separationen att modellen inte känner till något och inte förutsätter något om sina views. På samma sätt ska en view inte förutsätta något om sin controller utan bara skicka events för det användaren utför.
  • Controller är den komponent som hanterar användarinteraktion och styr affärslogiken. Controllern tar t.ex. emot knapptryck och inmatningar, uppdaterar modellen med nytt innehåll och uppdaterar modellens view. Det är också controllern som bestämmer vilken view som ska visas för en modell, om det finns flera.

I ASP.NET idag kan man säga att ASPX-/ASCX-sidan utgör view, och codebehind för sidan utgör controller. Hur man implementerar model styrs inte - det väljer utvecklaren själv från fall till fall. Problemet med ASP.NET är att controller (codebehind) och view (ASPX) är väldigt hårt knutna till varandra. Controllern anropas samtidigt som view och man måste krångla ganska mycket för att låta en controller välja en annan view (i princip göra en redirect).

Det nya MVC-ramverket för ASP.NET innebär en äkta MVC-arkitektur. Postbacks kommer t.ex. inte längre att skickas till codebehind, utan alltid till controllern för den objekttyp man arbetar med. Alla delar är sammankopplade med interface, vilket gör att det är lätt att byta ut stora delar vid testning (man kan t.ex. byta ut alla controllers mot dummy-objekt för att testa sina views, eller byta ut alla views för att göra smarta unit tests).

Det ska bli mycket intressant att se om MVC helt kommer att ersätta ASP.NET som det fungerar idag. MVC-ramverket förväntas komma i .NET Framework 3.5 SP 1, ganska snart.

Läs mer om ramverket i Scott Guthries blogg (han är en av utvecklarna i projektet).
Läs mer om arkitekturen MVC på WikiPedia.
Svenske bloggaren Fredrik Normén skriver också mycket om MVC-ramverket, ofta ur ett praktiskt perspektiv (hur man faktiskt använder det).

Anders Bornholm
2007-11-29