Uvod u MVC dizajn patern

Na njemu se zasnivaju neki od najpopularnijih frameworka i najviše se koristi u razvoju aplikacija i sajtova za web. Šta MVC sve danas predstavlja i odakle dolazi ova ideja?

Aleksa Vidović - 4. April, 2017.

Model-View-Controller (MVC) je arhitekturalni patern koji se koristi u razvoju softvera. U složenim aplikacijama koje prikazuju korisniku ogromne količine podataka programeri često žele da razdvoje kod koji se bavi podacima od onog koji se bavi interfejsom, tako da razvoj oba postane lakši i jednostavniji.

MVC rešava ovaj problem razdvajanjem podataka i biznis logike od njihovog prikaza i interakcije sa korisnikom, uz to uvodeći i komponentu zaduženu za koordinisanje prve dve.

Ideja koja je opstala od osamdesetih

Nakon što su izašli iz domena striktno vojne primene, računari su predstavljali zanimaciju za studente tehničkih nauka, matematičare, naučnike.

Popularnost računara u pomenutim krugovima rasla je sa njihovim razvojem, ali je postojala ogromna barijera koju je trebalo prevazići da bi računari postali zanimljivi većem broju korisnika. Glavni problem za to predstavljala je komplikovana upotreba koja je uključivala kucanje instrukcija putem komadne linije.

Ono što je bilo potrebno da bi se računar približio masama korisnika bio je grafički korisnički interfejs koji bi omogućio lakšu interakciju sa računarom, ali u isto vreme i otvorio prostor za nove primene računarske tehnologije.

Ubacivanje grafičkog interfejsa predstavljalo je jedan od gorućih problema u razvoju računara u tom vremenu i naveo je programere na različite ideje za rešavanje ovog problema. Jedna koja se izdvojila i izdržala test vremena do današnjeg dana jeste MVC, arhitektura GUI aplikacije koju je osmislio Trigve Rejanksug.

Trigve Rejanksug je prilikom razvoja jezika SmallTalk80 shvatio da se arhitektura programa sa grafičkim interfejsom može podeliti na nekoliko delova koji međusobno komuniciraju, s tim što bi svaki od njih bio zadužen za različite zadatke. Tako bi, na primer, jedan deo mogao da se bavi komunikacijom sa korisnikom prikazujući stvari na ekranu i uzimajući input, drugi deo podacima i logikom, a treći koordinisanjem ta dva.

Originalna implementacija znatno se razlikuje od onoga što danas smatramo MVC-om, ali je ideja ostala ista.

MVC danas

Pojam MVC danas ima mnogo značenja ‒ toliko da je teško biti siguran koja je zvanična definicija MVC-a. Ono što definitivno znamo jeste da je to arhitekturalni dizajn patern koji opisuje jedan specifičan način građenja aplikacija/programa/sistema. Podrazumeva postojanje tri vrste komponenti (Model, View, Controller) koje se međusobno nalaze u posebno definisanom odnosu.

Iako ima mane i iako su ga neki danas zamenili neki drugim paternima prilikom razvoja, MVC je kao ideja veoma važan u softverskoj zajednici, i manje više se očekuje da svako ko sebe naziva developerom zna šta ovaj pojam predstavlja.

Danas, kada se u praksi koriste i MVC-ovi rođaci MVP i MVVM, korisno je razumeti suštinu ideje o tome kako gradimo aplikacije sa grafičkim interfejsom kako bismo sa lakoćom prihvatili sve buduće varijacije na ovu temu.

Neki od najpopularnijih frameworka danas zasnivaju se upravo na MVC-u. Zend, Laravel, Django i mnogi drugi oslanjaju se na ovaj način građenja aplikacija. To pokazuje suštinu dizajn paterna — univerzalni recept za čest problem.

Kako sve to radi?

MVC deli sve ono što jedna aplikacija radi na tri dela.

Ovakvo gledanje na funkcionalnost — takozvano razdvajanje zaduženja — smatra se i inače dobrom praksom.

Model — sadrži podatke u obliku pogodnom za konkretnu primenu. Takođe sadrži i logiku aplikacije, definišući šta sve možemo da uradimo sa datim podacima. Mnoge aplikacije koriste mehanizme za trajno čuvanje podataka (bazu podataka, na primer). MVC ne definiše pristup podacima jer se smatra da je to “ispod” aplikacije ili enkapsulirano samim modelom.

View — prikazuje podatke iz modela u formatu pogodnom za interakciju, najčešće kao komponentu korisničkog interfejsa. U okviru jedne aplikacije može postojati više view-ova prilagođenih različitim situacijama koji prikazuju podatke iz istog modela.

Controller — koordiniše modele i view-ove, uglavnom na osnovu korisnikovog unosa. Kada se desi neki događaj, na primer klik na neko dugme, obaveštava model o tome.

Implementacije variraju — u zavisnosti od jezika, frameworka, i samog programera — samim tim možete čuti i različita objašnjenja za to šta bi koji od delova aplikacije trebalo da radi.

Neki smatraju da bi controller trebalo da ažurira view, neki misle da mu je zaduženje samo da obaveštava model o promenama. Postoje implementacije u kojima je komunikacija između view-a i modela dvosmerna, ali i one u kojima view samo posmatra model i na osnovu njega se sam ažurira.

Različiti pogledi na ovu ideju mogu da dovedu do konfuzije, pogotovo kod onih koji tek ulaze u materiju. Ipak, suština je u tome da razumemo koncept MVC-a, zašto razdvajamo zaduženja u aplikacijama na način na koji ih razdvajamo i kako da taj način razmišljanja primenimo i u drugim situacijama.

Sledeći u ovom serijalu su MVP i MVVM, MVC-ovi rođaci koji sa njim čine MV* grupu paterna.

Pogledaj još i:

Uvod u dizajn paterne

Antipaterni — Loše prakse kojima kočimo softverske projekte

12 knjiga koje bi svaki JavaScript developer trebalo da pročita