MVC staat voor Model - View - Controller. Dit is een design-pattern waarbij de verschillende verantwoordelijkheden van de applicatie worden gescheiden. In verschillende programmeer omgevingen zijn er implementaties voor deze design pattern (zoals onder andere: Ruby on Rails, Zend Framework, Struts). ASP.NET wordt binnenkort ook uitgebreid met een MVC framework.

MVC staat voor Model - View - Controller. Dit is een design-pattern waarbij de verschillende verantwoordelijkheden van de applicatie worden gescheiden. In verschillende programmeer omgevingen zijn er implementaties voor deze design pattern (zoals onder andere: Ruby on Rails, Zend Framework, Struts). ASP.NET wordt binnenkort ook uitgebreid met een MVC framework.
Het MVC patroon
Het design patten bestaat dus uit 3 rollen: Model, View en Controller. Wat houden deze rollen in?
Model:
Model objecten geven een implementatie aan de informatie/gegevens waarmee de applicatie werkt. De gegevens zullen over het algemeen uit een database komen en de model objecten voorzien de ruwe data van logica. Bijvoorbeeld berekeningen van iemands leeftijd, totale verkopen, wat zijn de verzendkosten van deze order, validatie, enz.
View:
View objecten vormen de grafische representatie of te wel de User Interface. Een model object wordt weergegeven door middel van een view object. Er kunnen meerdere views worden gemaakt van 1 model object. Zo kun je bijvoorbeeld n.a.v. een product-model, een view maken voor een overzicht van producten, maar ook een view voor het bewerken van een specifiek product.
Controller:
Controller objecten reageren op events (in de User Interface). De gebruiker klikt ergens op, wijzigt een waarde, enz. en de controller gaat het afhandelen. De controller kan bijvoorbeeld het model aanspreken om andere data te retourneren, weg te schrijven naar de database, of kan een andere view selecteren.
ASP.NET MVC framework
De leesbaarheid en herbruikbaarheid van je code wordt bevorderd door deze scheiding en daarnaast is het makkelijker om je te richten op bepaalde functionaliteit als je gaat ontwikkelen. Dus ga je je bezighouden met de weergave dan hoort dat in de view, de invoer logica hoort in de Controller en de business logica hoort in de model.
Deze onderverdeling maakt het bijvoorbeeld mogelijk om parallel te werken (3 developers kunnen aan de 3 verschillende objecten werken) en het wordt makkelijker om geautomatiseerde tests te schrijven als je specifieke functionaliteit wil testen. Zo is de Page-class van een ASP.NET pagina bijvoorbeeld verantwoordelijk voor de weergave en de afhandeling (van user input) en is het moeilijker om de test te richten op slechts 1 aspect.
Het MVC Framework in ASP.NET
Tot zo ver het design pattern, nu eens kijken hoe het in z’n werk gaat in Visual Studio. We maken gebruik van een nieuwe project template: ASP.NET MVC Web Application.
ASP.NET MVC framework
Er wordt een project aangemaakt. Het belangrijkste wat opvalt is dat er 3 mappen zijn aangemaakt, namelijk de mappen “Models”, “Controllers” en “Views”. Hierin komen de classes te staan die onze MVC oplossing gaan vormen.
Hierna maken we als eerste een Model object. Hiervoor kunnen we van alles gebruiken, maar voor deze introductie gebruik ik een Entity-framework model. Het model wordt dan naar aanleiding van de database gegenereerd.
ASP.NET MVC framework
Next stop: het maken van de Controller. Door met de rechtermuis op het project te klikken, krijg je de mogelijkheid om een controller toe te voegen.
ASP.NET MVC framework
Door het vinkje “Add action methods for Create, Update and Details scenarios” aan te laten, wordt er al het een en ander aan code aangemaakt voor deze acties. Dit resulteert in onderstaande code, waarin ik alleen de implementatie van de Index() methode handmatig gevuld heb. Hier wordt de model gebruikt om een view te retourneren.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
namespace MovApp.Controllers
{
    public class HomeCtrl : Controller
    {
       
        // GET: /Products/
        public ActionResult Index()
        {
            MovDBEntities _db = new MovDBEntities();
            ViewData.Model = _db.MovSet.ToList();
            return View();
        }
        // GET: /Products/Details/5
        public ActionResult Details(int id)
        {
            return View();
        }
        // GET: /Products/Create
        public ActionResult Create()
        {
            return View();
        }
        // POST: /Products/Create
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Create(FormCollection collection)
        {
            try
            {
                // TODO: Add insert logic here
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
Nu wordt het tijd om een View aan te maken. Hiervoor klikken we met rechts op de actie waar we een view bij willen creëren (in dit geval dus de index() methode). In het contextmenu kiezen we voor “Add View”
ASP.NET MVC framework
Er wordt een nieuwe aspx pagina toegevoegd in de Views-map en hierin is een opzet voor een weergave gegenereerd. Omdat er gekozen is voor “List” in het bovenstaande venster, zal er een lijst weergave gegenereerd worden.
<h2>Index</h2>
    <table>
    <% foreach (var item in Model) { %>
        <tr>
            <td>
                <%= Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) %> |
                <%= Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ })%>
            </td>
            <td>
                <%= Html.Encode(item.Id) %>
            </td>
            <td>
                <%= Html.Encode(item.Title) %>
            </td>
            <td>
                <%= Html.Encode(item.Name) %>
            </td>
            <td>
                <%= Html.Encode(item.BirthDate) %>
            </td>
        </tr>
    <% } %>
    </table>
    <p>
        <%= Html.ActionLink("Create New", "Create") %>
    </p>
Op dezelfde manier kunnen we dus ook views maken voor de andere acties, zoals het bekijken van details, het doorvoeren van wijzigingen aan de data, enz.
Positie t.o.v. ASP.NET
Is dit nu “the end of ASP.NET as we know it”? Kort en bondig: nee. Het MVC framework wordt naast het bestaande ASP geplaatst zeg maar. Met ieder zijn eigen voor- en nadelen en daarmee inzetbaar in verschillende situaties. Omdat het “ouderwetse” Forms-based ASP over het algemeen wat minder code vergt, minder complex is en een aantal voordelen heeft m.b.t. bijvoorbeeld state-management blijft dit zeker erg bruikbaar voor veel web applicaties. Maar als de complexiteit van de applicatie toeneemt , het ontwikkel team groter wordt en/of het testen van losse verantwoordelijkheden belangrijker wordt, komen de voordelen van het scheiden van verantwoordelijkheden (en dus het gebruik van het MVC framework) naar voren. De keuze is aan jou.
Meer Informatie
Dit was een korte introductie m.b.t. tot een nieuwe techniek die binnenkort beschikbaar komt. Natuurlijk is er nog veel meer over te vertellen en daarvoor kun je het beste terecht op de officiële ASP.NET MVC website. Hier vind je meer uitleg en voorbeelden: http://www.asp.net/mvc
Op dit moment heeft Microsoft een ASP.NET MVC 1.0 Release Candidate te beschikking en verwacht men over een maand met de daadwerkelijke release te komen. De release candidate is via de volgende link te downloaden.http://go.microsoft.com/fwlink/?LinkID=141184&clcid=0x409