Hvad er model-view-controller?
Model-view-controller (MVC) er en type softwarearkitektur og designmønster, der segmenterer hvert element i et program i veldefinerede funktionsområder. I model-view-controller-arkitektur behandler modellen al den interne programlogik, der manipulerer, gemmer, henter og ellers håndterer og beregner data. Visningsaspektet er ansvarligt for at vise information fra modellen for brugeren, og det giver også en måde for brugeren at give input til programmet. Controlleren henter input fra visningen, vurderer eller behandler det på anden måde og interagerer med modellen for at ændre data eller programtilstanden, som i sidste ende vises for brugeren gennem visningen. Selvom design af model-viewer-controller kræver et program til at indkapsle funktionalitet, er de tre sektioner stadig nødt til at interagere med hinanden på en eller anden måde og generelt er afhængige af hinanden i en vis forstand, i modsætning til andre mere aggressive designmønstre.
Ganske ofte ses model-view-controller-mønsteret i applikationer, der administrerer en grafisk brugergrænseflade (GUI). Ved hjælp af MVC-mønsteret håndteres de forskellige visuelle elementer i GUI ved hjælp af visningen, optagelse og behandling af hvor og hvad en bruger klik håndteres af controlleren, og faktisk ændrer information eller indlæses information udføres af modellen. Afhængigt af det nøjagtige design af en applikation kan hver komponent i MVC-mønsteret have en mekanisme til at interagere med de andre komponenter, såsom modellen kan direkte instruere visningen om at opdatere skærmen eller udsigten på en måde at fortælle controller, at det opdaterer skærmen og ikke accepterer nyt input. I modsætning til nogle designmønstre, der tager en streng black-box-tilgang, har tendenser til model-view-controller tendens til at være lidt mere fleksible, selvom nogle implementeringer kan gøre et MVC-program vanskeligt at ændre eller fejlsøge modulært.
I visse tilfælde behøver model-view-controller-mønsteret ikke kun at indeholde en af hver komponent. Et eksempel er et program, der har flere visninger, såsom flere skærme, eller et display, der kan ses på flere klientenheder. Flere visninger og controllere kan bruges i et program, der giver mange brugere adgang til en database, alt svarende til en enkelt model. Det er dog mere almindeligt at designe systemer, der opretholder et en-til-en-forhold mellem model-view-controller-komponenterne.
Selvom komponenter til model-view-controller er afhængige af hinanden, kan det være meget lettere at ændre visse dele af et system, der bruger MVC-mønsteret, end hvis der ikke blev brugt et mønster overhovedet, især i tilfælde af ikke-objektorienteret applikationer. Hvis en applikation bruger tilbagekald eller lyttere og observatører til at implementere interaktioner mellem komponenterne, kan hver komponent ændres uden at påvirke de to andre. Dette betyder, at en ny GUI kunne implementeres uden at påvirke modellen eller controlleren. Det skal dog bemærkes, at grundlæggende ændringer af et model-view-controller-system muligvis kræver en vis lille mængde genkodning for hver enkelt komponent.