Dette materialet er en del av serien "Introduksjon til bedriftsutvikling". Tidligere artikler:
I denne artikkelen skal vi bli kjent med noe som heter MVC. Vi skal snakke om hva MVC er, berøre historien, utforske de grunnleggende ideene og konseptene som er nedfelt i MVC, ta en steg-for-steg titt på hvordan du deler opp en applikasjon i modell-, visnings- og kontrollermoduler, skriver en liten nettapplikasjon som bruker Spring Boot, og ved å bruke Spring MVC som eksempel, se hvordan data sendes fra Java-kode til HTML-sider. For å forstå dette materialet, må du være kjent med designmønstre, spesielt observatør og fasade. Og bli kjent med HTTP-forespørsler og svar, forstå det grunnleggende om HTML og vite hva Java-merknader er. Ta en kopp kaffe og matbit, og bli komfortabel. La oss begynne.
Fra alt dette kan vi trekke en logisk konklusjon. Et komplekst system må deles inn i moduler. La oss kort beskrive trinnene for å oppnå denne separasjonen.
Og slik kommer vi frem til en applikasjon bestående av tre moduler kalt modell, visning og kontroller. La oss oppsummere:
- om nettverk
- om programvarearkitektur
- om HTTP/HTTPS
- om det grunnleggende om Maven
- om servlets (skrive en enkel nettapplikasjon)
- om servletbeholdere

Historien om MVC
Ideene bak MVC ble formulert av Trygve Reenskaug mens han jobbet ved Xerox PARC på slutten av 1970-tallet. På den tiden krevde arbeidet med datamaskiner en grad og konstant studie av omfangsrik dokumentasjon. Oppgaven løst av Reenskaug sammen med en gruppe meget sterke utviklere var å forenkle en vanlig brukers interaksjon med datamaskinen. Det var nødvendig å lage verktøy som på den ene siden skulle være ekstremt enkle og forståelige, og på den andre siden gjøre det mulig å kontrollere datamaskiner og komplekse applikasjoner. Reenskaug jobbet på et team som utviklet en bærbar datamaskin "for barn i alle aldre" - Dynabook, samt SmallTalk-språket under ledelse av Alan Kay. Det var da konseptene for et vennlig grensesnitt ble lagt ned. På mange måter, arbeidet utført av Reenskaug og teamet hans påvirket utviklingen av IT-sfæren. Her er et interessant faktum som ikke gjelder MVC direkte, men som illustrerer betydningen av denne utviklingen. Alan Kaysa, "Da jeg først kom til Apple, som var i 84, var Mac-en allerede ute og Newsweek kontaktet meg og spurte meg hva jeg syntes om Mac-en. Jeg sa: Vel, Mac-en er den første personlige datamaskinen som er god nok til å bli kritisert.' Så, etter å ha annonsert iPhone i 2007, tok han den opp til meg og ga den til meg. Han sa: 'Alan, er dette bra nok til å bli kritisert?' Og jeg sa: «Steve, gjør den i denne størrelsen like stor som et nettbrett, og du vil styre verden.» Etter 3 år, 27. januar 2010, introduserte Apple iPad med en diagonal på 9,7 tommer. Steve Jobs fulgte med andre ord Alan Kays råd nesten nøyaktig. Reenskaugs prosjekt varte i 10 år. Men den første publikasjonen om MVC kom frem etter ytterligere 10 år. Martin Fowler, forfatter av flere bøker og artikler om programvarearkitektur, nevner at han studerte MVC ved å bruke en fungerende versjon av Smalltalk. Fordi det ikke var informasjon om MVC fra den opprinnelige kilden på lenge, og av flere andre grunner, dukket det opp et stort antall forskjellige tolkninger av dette konseptet. Som et resultat anser mange MVC for å være et designmønster. Mindre vanlig kalles MVC et sammensatt mønster eller en kombinasjon av flere mønstre som fungerer sammen for å lage komplekse applikasjoner. Men, som nevnt tidligere, er MVC faktisk først og fremst et sett med arkitektoniske ideer/prinsipper/tilnærminger som kan implementeres på ulike måter ved å bruke forskjellige mønstre... Deretter skal vi vurdere hovedideene som er innebygd i MVC-konseptet. og av flere andre grunner dukket det opp et stort antall forskjellige tolkninger av dette konseptet. Som et resultat anser mange MVC for å være et designmønster. Mindre vanlig kalles MVC et sammensatt mønster eller en kombinasjon av flere mønstre som fungerer sammen for å lage komplekse applikasjoner. Men, som nevnt tidligere, er MVC faktisk først og fremst et sett med arkitektoniske ideer/prinsipper/tilnærminger som kan implementeres på ulike måter ved å bruke forskjellige mønstre... Deretter skal vi vurdere hovedideene som er innebygd i MVC-konseptet. og av flere andre grunner dukket det opp et stort antall forskjellige tolkninger av dette konseptet. Som et resultat anser mange MVC for å være et designmønster. Mindre vanlig kalles MVC et sammensatt mønster eller en kombinasjon av flere mønstre som fungerer sammen for å lage komplekse applikasjoner. Men, som nevnt tidligere, er MVC faktisk først og fremst et sett med arkitektoniske ideer/prinsipper/tilnærminger som kan implementeres på ulike måter ved å bruke forskjellige mønstre... Deretter skal vi vurdere hovedideene som er innebygd i MVC-konseptet.MVC: Grunnleggende ideer og prinsipper
- VC er et sett med arkitektoniske ideer og prinsipper for å bygge komplekse informasjonssystemer med et brukergrensesnitt
- MVC er en forkortelse som står for: Model-View-Controller

Trinn 1. Skill applikasjonens forretningslogikk fra brukergrensesnittet
Hovedideen til MVC er at enhver applikasjon med brukergrensesnitt kan deles inn i 2 moduler: en modul som er ansvarlig for å implementere forretningslogikken, og brukergrensesnittet. Den første modulen vil implementere applikasjonens hovedfunksjonalitet. Denne modulen er kjernen i systemet, hvor applikasjonens domenemodell er implementert. I MVC-paradigmet er denne modulen bokstaven M, altså modellen. Den andre modulen implementerer hele brukergrensesnittet, inkludert logikken for å vise data til brukeren og håndtere brukerinteraksjon med applikasjonen. Hovedmålet med denne separasjonen er å sikre at kjernen i systemet ("modellen" i MVC-terminologi) kan utvikles og testes uavhengig. Etter å ha gjort denne separasjonen, ser applikasjonens arkitektur slik ut:
Trinn 2 Bruk observatørmønsteret for å gjøre modellen enda mer uavhengig og for å synkronisere brukergrensesnitt
Her har vi 2 mål:- Oppnå enda større uavhengighet for modellen
- Synkroniser brukergrensesnitt
Trinn 3 Separer grensesnittet i visning og kontroller
Vi fortsetter å dele opp applikasjonen i moduler, men nå på et lavere nivå i hierarkiet. På dette trinnet er brukergrensesnittet (som vi delte inn i en distinkt modul i trinn 1) delt inn i en visning og en kontroller. Det er vanskelig å trekke en streng linje mellom visningen og kontrolleren. Hvis vi sier at utsikten er det brukeren ser, og kontrolleren er mekanismen som lar brukeren samhandle med systemet, kan du påpeke en selvmotsigelse. Kontrollelementer, som knapper på en nettside eller et virtuelt tastatur på telefonens skjerm, er i utgangspunktet en del av kontrolleren. Men de er like synlige for brukeren som alle deler av visningen. Det vi egentlig snakker om her er funksjonell separasjon. Brukergrensesnittets hovedoppgave er å lette brukerens interaksjon med systemet.- ut og enkelt vise systeminformasjon til brukeren
- skriv inn brukerdata og kommandoer (kommuniser dem til systemet)

- I henhold til prinsippene i MVC-paradigmet må et system deles inn i moduler.
- Den viktigste og mest uavhengige modulen bør være modellen.
- Modellen er kjernen i systemet. Det skal være mulig å utvikle og teste det uavhengig av brukergrensesnittet.
- For å oppnå dette, i det første trinnet i delingen, må vi dele opp systemet i en modell og brukergrensesnitt.
- Deretter, ved hjelp av observatørmønsteret, styrker vi modellens uavhengighet og synkroniserer brukergrensesnitt.
- Det tredje trinnet er å dele brukergrensesnittet inn i en kontroller og visning.
- Alt som kreves for å motta brukerdata inn i systemet er i kontrolleren.
- Alt som kreves for å levere informasjon til brukeren er i visningen.
Litt om hvordan visningen og kontrolleren samhandler med modellen
Ved å legge inn informasjon gjennom kontrolleren, endrer brukeren modell. Eller i det minste endrer brukeren modelldataene. Når brukeren mottar informasjon gjennom grensesnittelementer (via visningen), mottar brukeren informasjon om modellen. Hvordan skjer dette? På hvilke måter samhandler visningen og kontrolleren med modellen? Tross alt kan ikke visningens klasser direkte kalle metodene til modellens klasser for å lese/skrive data. Ellers ville vi ikke kunne si at modellen er uavhengig. Modellen er et sett med nært beslektede klasser som verken visningen eller kontrolleren skal ha tilgang til. For å koble modellen til utsikten og kontrolleren, må vi implementere fasadedesignmønsteret. Modellens fasade er laget mellom modellen og brukergrensesnittet, der visningen mottar praktisk formaterte data, og kontrolleren endrer data ved å kalle de nødvendige metodene på fasaden. Til slutt ser alt slik ut:
GO TO FULL VERSION