Wat is Model-View-Controller?
Model-view-controller (MVC) is een type software-architectuur en ontwerppatroon dat elk element van een programma segmenteert in goed gedefinieerde functionele gebieden. In de model-view-controller-architectuur behandelt het model alle interne programmalogica die gegevens manipuleert, opslaat, ophaalt en anderszins verwerkt en berekent. Het weergave-aspect is verantwoordelijk voor het weergeven van informatie uit het model voor de gebruiker, en het biedt ook een manier voor de gebruiker om input te geven aan het programma. De controller neemt input uit de weergave, beoordeelt deze of verwerkt deze op een andere manier en werkt samen met het model om gegevens of de programmastatus te wijzigen, die uiteindelijk via de weergave aan de gebruiker wordt getoond. Hoewel het model-viewer-controllerontwerp een programma vereist om functionaliteit in te kapselen, moeten de drie secties nog steeds op een of andere manier met elkaar communiceren en in het algemeen in zekere zin van elkaar afhankelijk zijn, in tegenstelling tot andere agressievere ontwerppatronen.
Heel vaak wordt het model-view-controllerpatroon gezien in applicaties die een grafische gebruikersinterface (GUI) beheren. Met behulp van het MVC-patroon worden de verschillende visuele elementen van de GUI verwerkt door de weergave, het opnemen en verwerken van waar en waarop een gebruiker klikt, wordt afgehandeld door de controller en het wijzigen van informatie of het laden van informatie gebeurt door het model. Afhankelijk van het exacte ontwerp van een applicatie, kan elke component van het MVC-patroon een mechanisme hebben om te communiceren met de andere componenten, zoals het model dat de weergave direct kan instrueren om het scherm te vernieuwen of de weergave met een manier om de controller dat hij het scherm vernieuwt en geen nieuwe invoer accepteert. In tegenstelling tot sommige ontwerppatronen die een strikte black-box aanpak hanteren, zijn programma's voor controller met modelweergave meestal iets flexibeler, hoewel sommige implementaties een MVC-programma moeilijk kunnen wijzigen of modulair debuggen.
In bepaalde gevallen hoeft het model-view-controllerpatroon niet slechts één van elke component te bevatten. Een voorbeeld is een applicatie die meerdere weergaven heeft, zoals meerdere monitoren, of een weergave die op meerdere client-apparaten te zien is. Meerdere weergaven en controllers kunnen worden gebruikt in een toepassing waarmee veel gebruikers toegang hebben tot een database, die allemaal beantwoorden aan een enkel model. Het is echter gebruikelijker om systemen te ontwerpen die een één-op-één verhouding van de componenten van de modelweergavecontroller behouden.
Hoewel componenten van de modelweergavecontroller op elkaar vertrouwen, kan het veel eenvoudiger zijn om bepaalde delen van een systeem die het MVC-patroon gebruiken te wijzigen dan wanneer er helemaal geen patroon zou worden gebruikt, vooral in het geval van niet-objectgeoriënteerd toepassingen. Als een toepassing callbacks of luisteraars en waarnemers gebruikt om interacties tussen de componenten te implementeren, kan elke component worden gewijzigd zonder de andere twee te beïnvloeden. Dit betekent dat een nieuwe GUI kan worden geïmplementeerd zonder het model of de controller te beïnvloeden. Er moet echter worden opgemerkt dat fundamentele wijzigingen in een model-view-controller-systeem mogelijk een kleine hoeveelheid hercodering voor elke afzonderlijke component vereisen.