200px|мини|Dijagram interakcije između komponenti projektnog uzorka MVC model - prikaz - kontrolor MVC () arhitektura je projektni uzorak () koji se obično koristi za razvoj korisničkih interfejsa. Počiva na ideji o ponovnoj upotrebi već postojećeg softverskog koda, olakšavanju razvoja i kasnijem održavanju aplikacionog softvera metodom razdvajanja na posebne komponente: model, prikaz podataka (pogled) i kontrolor (upravljač), pri čemu je komponenta za prikaz informacija odvojena od interakcije korisnika sa tim informacijama.
Istorija MVC arhitektura se sastoji od određenih komponenti u kojima je svaka zadužena za obavljanje specifičnih funkcija. Takvo rešenje je mnogo bolje u odnosu na ranije rešenja u kojima se sve nalazilo na jednom mestu, što je dovodilo do otežanog čitanja izvornog koda, otežanog pronalaženja i ispravljanja grešaka, kao i do znatno manje funkcionalnosti i fleksibilnosti. MVC ja kao okvir softverske arhitekture nastao pre nego što je izmišljen veb-pregledač, i u početku je korišćen samo za kreiranje grafičkog korisničkog okruženja.
Norveški informatičar Trigvi Riensku () je tokom posete Ziroksu sedamdesetih godina prvi put predstavio MVC arhitekturu primenjenu na Smalltalk-76.Notes and Historical documents from Trygve Reenskaug, inventor of MVC."A note on DynaBook requirements", Trygve Reenskaug, 22 March 1979, SysReq.pdf. On je MVC kao apstraktni prikaz arhitekture softvera definisao na sledeći način:
Model predstavlja podatke. Podaci mogu biti samo jedan objekat ili struktura objekata. Veza između modela i onoga što vidi korisnik trebala bi da bude 1 na 1. Komunikacija između modela i spoljašnjeg sveta bi trebao da se obavlja uz pomoć kontrolora. Pogled ili vizualna prezentacija modela, je povezana sa modelom ili jednim njegovim delom. Ponaša se kao filter, koji iz modela naglašava određene vrednosti koji opisuju podatke (atributi), dok neke druge potiskuje i tako filtrirane podatke prikazuje korisniku. Takođe, ima mogućnost ažuriranja modela, slanjem odgovarajućih zahteva korisnika. Kontrolor je veza između korisnika i podataka. On korisniku, u zavisnosti od njegovog zahteva prikazuje podatke. Zatim su osamdesetih godina Džejms Altof () i drugi upotrebili verziju MVC-a za Smalltalk-80 biblioteku klasa. Tek u članku iz 1988-e MVC je predstavljen kao poseban pojam. Also published as "A Description of the Model-View-Controller User Interface Paradigm in the Smalltalk-80 System" (Report), ParcPlace Systems; Retrieved 2012-06-05.
U početku MVC šablon nije funkcionisao kao danas, već je izgledao ovako:
model je podatak koji aplikacija prikazuje prikaz podataka iz modela, pri čemu jedan podatak može više načina prikazivanja. Na primer, očitanje temperature se može prikazati visinom stupca ili oznakom za temperaturu kontrolor prikuplja akcije koje korisnik napravi i na osnovu njih menja model. Tako na primer, kontrolor može da prikuplja akcije koje korisnik napravi mišem, a zatim, na osnovu njih može da izmeni model. U tom smislu, kontrolor je predstavljen kao program koji radi s ulaznim podacima, slično kao što se u korisničkom okruženju radi sa izlaznim podacima. Na taj način, prikaz podataka se ažurira direktno, na osnovu izmena u modelu. Kada se model izmeni, on pokrene akciju koja menja prikaz podataka, pri čemu kontrolor ne upravlja prikazom podataka, već samo menja model, a prikaz podataka se ažurira tek nakon promena realizovanih u modelu.
Komponente Osnovna prednost MVC arhitekture je što se razdvajanjem u posebne celine, kod velikih projekata, na kome može da radi više osoba, omogućava laka izmena nekog elementa, bez velike intervencije u drugim elementima, kao i ponovno korišćenje već napravljenih elemenata.
MVC projektni šablon se sastoji od tri zasebne, ali međusobno povezane komponente: model — je centralni deo aplikacije, koja obuhvata promenljivu (dinamičku) strukturu podataka, direktno upravljanje podacima, logikom i pravilima aplikacije prikaz, pogled ili pregled podataka () - bilo koji izlazni prikaz podataka u korisničkom okruženju (na primer grafički pomoću dijagrama), pri čemu se isti podaci mogu prikazati na više načina (na primer stubični dijagrami za menadžment i tabelarni prikaz za računovodstvo) upravljač ili kontrolor () — ulazne podatke pretvara u komande koje upravljaju modelom ili prikazom podataka u korisničkom okruženju. Praktično, u ovakvoj arhitekturi, model predstavlja „telo”, prikaz podataka su „oči”, a kontrolor „mozak” projekta.
Model Model sadrži glavne programske podatke, kao što su informacija o objektima iz baze podataka, sastoji se od skupa klasa koje modeliraju i podržavaju rešavanje problema kojim se aplikacija bavi. Obično je stabilna komponenta, koja traje koliko i sam problem. Sva poslovna logika aplikacije sadržana je u modelu. Postoji nekoliko načina konstrukcije kostura modela. Naime, programer može najpre da konstruiše model, definisanjem klasa i atributa unutar klasa, te kasnije, na osnovu klasa da formira bazu podataka.
Češći način je projektovanje najpre baze podataka, na osnovu kojeg se kasnije generišu klase. U svakom slučaju, potrebno je uzeti u obzir i veze između modela u aplikaciji.
U MVC arhitekturi postoje model područja ili domena (), i model aplikacije (). Model područja sadrži glavne podatke o strukturi podataka, dok model aplikacije sadrži sve potrebne funkcije za upravljanje tim podacima, odnosno za upis, izmenu i brisanje podataka. Zavisno od potreba, razlikuju se tri vrste modela: konceptualni, logički i fizički model. Konceptualni model sadrži samo prikaz naziva entiteta. Logički model sadrži i nazive atributa, primarnih i sekundarnih ključeva. Fizički model sadrži informaciju o tome kako se podaci „vide“ u memoriji.
Svi podaci se mogu dobiti preko modela, ali se model ne može direktno pozvati, već se to vrši preko kontrolora, u obliku zahteva. Ove zahtev model zatim obrađuje, te vraća kontroloru zahtevane podatke. Kontrolor dalje prikazuje dobijene podatke krajnjem korisniku.
Model predstavlja jednu ili više klasa sa svojim stanjima, koja se mogu prikazati na zahtev korisničkog okruženja, a kontrolor ih može i menjati.
Razlikuju se aktivni model u kome se stanje menja posredstvom kontrolora i pasivni model, kod koga se stanje u modelu vrši bez učešća kontrolora. Međutim, u praksi je češći scenario u kojem model ima aktivnu ulogu i predstavlja deo poslovne logike. U tom slučaju, model obezbeđuje metode koje će se koristiti da bi se ažuriralo trenutno stanje objekata. Model takođe može obavestiti korisničko sučelje o promeni stanja, pri čemu se prikaz trenutno osvežava.
U osnovnom obliku model nema nikakvo saznanje o prikazu podataka i kontroloru, dok u proširenoj verziji MVC arhitekture, model može da sadrži i osnovne operacije za rad sa prikazima, kod takozvanog „posmatračkog” projektnog uzorka ().
Prikaz podataka Komponenta za prikaz podataka je poslednji sloj MVC arhitekture, koji sadrži okruženje aplikacije, odnosno obezbeđuje različite načine za prezentovanje podataka dobijenih od modela, preko kontrolora.
Korisnik može videti samo ono što se vidi u ovoj komponenti, dok su model i kontrolor obično skriveni od korisnika.
Najvažnija osobina ove komponente je njena jednostavnost, jer predstavlja vizuelni prikaz modela koji sadrži metode za prikazivanje i omogućava korisniku da menja podatke. Ona svakako ne treba da bude nadležna za skladištenje podataka, osim kada se koristi keširanje kao mehanizam za poboljšanje karakteristika.
Njegov zadatak je što jasnije prikazivanje podataka koji zanimaju korisnika te do tih podataka korisnik treba doći što jednostavnijim putem. Struktura pregleda ne sme biti previše kompleksna i niti imati preveliku odgovornost. Najbolji prikazi podataka su oni koji odgovaraju samo za jedan model, te prikazuju podatke samo tog modela. Moguć je prikaz jednog ili više objekata iz modela, pri čemu se ne bavi obradom podataka. Prikaz podataka zavisi od modela, odnosno metoda modela preko kojih se podaci dobijaju. Prikaz mora što jasnije prikazivati podatke koji zanimaju korisnika te do tih podataka korisnik treba doći što jednostavnijim putem. Vizualna reprezentacija podataka može se nalaziti u različitim formatima, kao što su veb-pregledač, ili datoteke u HTML, XML ili PDF formatu.
Kontrolor Kontrolor predstavlja posrednika između prikaza podataka i modela. Sadrži glavne mehanizme za kontrolu toka programa, odnosno ponašanje same aplikacije i upravlja korisničkim zahtevima. On je programski najzahtevniji deo aplikacije.
Kontrolor interpretira ulazne podatke korisnika i prosleđuje ih do modela ili ih prikazuje korisniku. On sadrži deo aplikacijske logike i ima sposobnost da utiče na stanje modela, odnosno odlučuje kako model treba da se izmeni, kao rezultat korisničkih zahteva, kao i način na koji će se podaci prikazati.
Interakcije između komponenti Osim podele aplikacije u tri odvojene komponente, MVC arhitektura omogućava i interakciju između njih: prikaz () - prikazuje korisniku stanje modela, obezbeđuje korisničko sučelje, pomoću koga korisnik unosi podatke i poziva odgovarajuće operacije koje treba da se izvrše nad podacima kontrolor () - osluškuje i prihvata zahteve klijenta za izvršenje neke operacije. Nakon toga poziva operaciju koja je definisana u modelu, i ukoliko model promeni stanje, prikazuje ga korisniku. model - predstavlja stanje sistema koje se može promeniti izvršavanjem operacija nad objektima u modelu podataka. Za model nije bitno kako se upravlja podacima, niti način na koji se podaci prikazuju korisniku.
Važno je zapamtiti da prikaz u korisničkom okruženju i kontrolor zavise od modela, dok model ne zavisi niti od prikaza, niti od kontrolora komponenti, što omogućava razvoj i testiranje modela nezavisno od njegove prezentacijske logike.
Prednosti i mane Prednosti MVC arhitekture:
model se može prikazati na više načina lakše je dodati novi prikaz podataka (na primer novu internet stranicu koja prikazuje postojeće podatke ili deo njih) lakša se menja interakcija sa korisnikom više programera može raditi istovremeno i paralelno na različitim komponentama mogućnost ponovna korišćenja koda pojedinačni delovi se mogu lako testirati, menjati i poboljšavati prikaz podataka je odvojen od logike obrade podataka
Mane MVC arhitekture su:
previše kompleksna za primenu kod razvoja manjih aplikacija, što dovodi do pogoršanja kako njenog dizajna, tako i njenih karakteristika usled čestih izmena modela prikaz podataka može ostati preplavljen zahtevima za izmenu, što može dovesti do kašnjenja u odgovorima na zahteve.
Primena MVC arhitekture u web aplikacijama MVC je široko prihvaćen kao projektni uzorak za aplikacije na svetskoj mreži, u svim značajnijim programskim jezicima. Nekoliko komercijalnih i nekomercijalnih programskih okvira () koriste ovaj projektni uzorak. Svaki od njih varira u interpretaciji načina na koji su podeljene odgovornosti između klijenta i servera. Kod onih ranijih, ceo model, prikaz i kontrolor su se nalazi na serveru. Klijent je samo slao zahtev (na primer preko formulara), a potom primao kompletnu novoformiranu veb-stranicu.
U veb-aplikacijama komponenta za prikaz (pogled) sadrži: HTML, CSS, Javaskript, XML ili JSON i druge, pri čemu se prva tri ne preporučuju u kontroloru. U veb-aplikacijama kontrolor predstavlja prvi sloj koji se poziva kada veb-pretraživač pozove neku veb-adresu.
Napredak tehnologije je omogućio da se MVC komponente delom izvršavaju kod klijenta (Ajax).
Unapređivanje MVC arhitekture MVC arhitektura se već neko vreme bavi unapređivanjem prethodnih verzija, pa je razvijeno više različitih verzija MVC arhitekture. Sve one su uglavnom slične, s manjim razlikama u logici odvijanja procesa i nazivima komponenti.