Wat is MVC oftewel Model View Controller?

Een term die veel softwareontwikkelaars gebruiken is MVC (Model View Controller). Maar wat betekent MVC nu echt en welke voordelen biedt het? In dit artikel meer over deze programmeertechniek.

 

Model view controller

Model View Controller (MVC) is een softwaremodelleringstechniek die steeds meer aan populariteit wint. Bij MVC maakt men gebruik van een scheiding tussen drie onderdelen:

 

  • Model: gaat over de opslag en het opvragen van gegevens in de database. Definieert in veel frameworks een opvraagbaar array van databasetabellen en -velden met bijbehorende functies voor datamanipulatie
  • View: hoe data op het scherm te tonen? (presentatielaag)
  • Controller: programmalogica. Zorgt er tevens voor dat model en view ingeladen en gebruikt worden.

 

Samen vormen deze drie elementen een zogeheten module. Een module is een los legoblokje die binnen het grotere geheel van een min of meer complexe webapplicatie past. Omdat programmeurs en software architecten houden van overzicht, is een module gedefinieerd als een eenheid met een bepaalde taak en niet meer. Een los legosteentje van programmeercode die gemakkelijk binnen andere systemen, mits gecodeerd volgens dezelfde standaarden, gepast moet kunnen worden. Een module omvat een enkel aspect binnen de webapplicatie, bijvoorbeeld klantbeheer, facturatie, paginabeheer of gebruikersbeheer. Het takenpakket van een module is zo bepaald dat de broncode van de programmatuur overzichtelijk blijft.

 

 

Controller actions

Een controller bestaat uit zogenaamde actions. Dit zijn stukjes programmeercode (functions) die acties weergeven. Een voorbeeld: er is een module over paginabeheer met de volgende actions:

 

  • Pagina toevoegen
  • Pagina bewerken
  • Pagina verwijderen
  • Pagina tonen

 

Dit zijn vier elementaire functies op het gebied van paginabeheer. De module, en dus uiteindelijk de logica, de controller moet deze vier functies bevatten. In MVC heten deze functies dus actions.

 

 

Router en dispatcher

De browser van de gebruiker van een webapplicatie zal steeds een zogenaamde request URI sturen. Model View Controller is zo opgezet dat aan de hand van deze requeststring de juiste module en action gekozen kunnen worden. Het eerste deel van het stukje programmeercode dat hiervoor verantwoordelijk is wordt een router genoemd. Deze leest de request URI uit en zorgt ervoor dat de juiste module en action gekozen worden. Deze informatie wordt doorgegeven aan de zogenaamde dispatcher.

 

De dispatcher zorgt ervoor dat de juiste module en bijbehorend model, controller en view worden ingeladen. Vervolgens wordt het juiste action van de controller ingeladen en uitgevoerd.

 

 

Voordelen van MVC programmeren

Vroeger programmeerde men zodanig dat de broncode van een complex softwareproject na enkele jaren niet meer onderhoudbaar was. Men moest dan vaak weer vanaf nul beginnen om een nieuwe versie van bepaalde software in elkaar te zetten. De term "software crisis" is een term die ontstond in de jaren tachtig, maar heden ten dage nog vaak wordt gebruikt wanneer het fundament van software niet in orde is. Model view controller biedt een opzet waarmee broncode jarenlang mee kan gaan, mits strikt aan de regels gehouden.

 

Wie volgens MVC codeert moet zich houden aan de strikte scheiding tussen model, view en controller, die zelfs tot in de mappenstructuur geregeld is. Zo mag er in de view geen databasetransactie worden uitgevoerd. Dit is voorbehouden aan het model. En er mogen in de controller ook geen HTML-codes worden gebruikt. Want HTML is presentatie, en die verantwoordelijkheid ligt bij de view.

 

Complexe computerprogramma's bestaan uit duizenden regels code en al deze code moet onderhouden worden - het oplossen van softwarefouten en uitbreiding van de functionaliteiten. Het gebruik van MVC heeft als voordeel dat het als een soort routebeschrijving voor softwareontwikkelaars geldt. Wanneer er iets mis gaat in de presentatielaag van een zekere module weet de softwareontwikkelaar door het overzichtelijke karakter van model view controller exact welk bestand hij moet veranderen om de bug op te lossen.