Mvc

Mvc

Introduktion:
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øsningen:
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.
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.

Sourcekode til eksempel:
Controller.java
MinusController.java
Model.java
ObservingController.java
PlusController.java
ResetController.java
StarterFrame.java
View.java
WindowHandler.java

Fig. 2 Model View Controller Eksempel.
Fig. 2 Model View Controller Eksempel.
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.