Model View Controller (mvc) mønstret stammer oprindeligt fra programmeringssproget smalltalk og
blev brugt til at afkoble det grafiske interface fra det kode der udfører det faktiske arbejde.
Motivation.
I forbindelse med udvikling af en applikation ønskes det at afkoble applikationens data (model)
fra dens grafiske grænseflade (view).
Problem.
Den samme data har behov for at kunne tilgåes og opdateres via forskellige views f.eks. html,
swing, xml o.s.v.
Applikationer har i dag behov for at kunne understøtte flere forskellige typer af brugere med
forskellige interfaces. F.eks. en online butik kan have brug for en html view til brugerne,
et WML view til wireless brugere, og et Java TM (JVC)/Swing view til administratorer, o.s.v..
Løsning.
Ved at tilføje Model View Controller (MVC) pattern til applikationen kan man separere applikationens
funktionalitet fra presentationen og kontrol logikken, der styrer funktionaliteten.
Fig. 1 Model View Controller.
Model
Modellen repræsenterer forretningsdata, samt de regler der gælder for at kunne tilgå
og opdatere dataene.
View
View'et renderer indholdet af modellen. Det tilgår forretningsdata via modellen og
specificerer hvordan dataene skal vises. Det er View'ets ansvar at sørge for konsistens i præsentationen
hvis modellen ændres. Dette kan gøres via Push eller pull metoder hvor View'et entet selv lytter efter
ændringer eller bliver gjort opmærksom på det.
Controller
Controlleren sørger for at input fra view'et bliver lavet om til opdateringer der skal
udføres på modellen. Hændelser udført af modellen inkluderer aktivering af forretningsprocessor, samt
ændring af modellens tilstand. Ud fra brugerens interaktioner, samt resultatet af modellens arbejde, vælger
den det rette view.
Det viste eksempel laver en GUI med 5 tal og tre knapper.
Modellen indeholder den viste værdi i de 5 tal.
Modellen har desuden en række metoder til at ændre dette tal.
Controller delen består af de tre knapper "Minus", "Plus" og "Reset". Når man trykker på en af knapperne
vil tallet blive ændret og view'et blive opdateret.
Relaterede patterns.
Observer - Observeren sørger for at notifikation om ændringer et sted sendes til
et andet sted.