Model-view-controller (MVC) je vrsta softverske arhitekture i uzorka dizajna koji segmentira svaki element programa u dobro definirana područja funkcionalnosti. U arhitekturi model-pogled-kontroler, model se bavi svom internom programskom logikom koja manipulira, sprema, dohvaća i na drugi način rukuje i izračunava podatke. Aspekt pogleda odgovoran je za prikaz informacija iz modela za korisnika, a također pruža način na koji korisnik može dati unos u program. Upravljač uzima ulazne podatke iz pogleda, procjenjuje ih ili na drugi način obrađuje te stupa u interakciju s modelom kako bi promijenio podatke ili stanje programa, što se u konačnici prikazuje korisniku kroz pogled. Iako dizajn model-preglednik-kontroler zahtijeva program za enkapsulaciju funkcionalnosti, tri dijela i dalje moraju na neki način međusobno komunicirati i općenito su ovisni jedan o drugom u nekom smislu, za razliku od drugih agresivnijih obrazaca dizajna.
Vrlo često se obrazac model-pogled-kontroler može vidjeti u aplikacijama koje upravljaju grafičkim korisničkim sučeljem (GUI). Koristeći MVC uzorak, različitim vizualnim elementima GUI-ja upravlja pogled, snimanjem i obradom toga gdje i što korisnik klikne upravlja kontroler, a stvarnu promjenu informacija ili učitavanje informacija vrši model. Ovisno o točnom dizajnu aplikacije, svaka komponenta MVC uzorka može imati mehanizam za interakciju s drugim komponentama, kao što je model koji može izravno uputiti prikaz da osvježi zaslon ili pogled koji ima način da kaže kontroler da osvježava zaslon i da ne prihvaća novi unos. Za razliku od nekih obrazaca dizajna koji imaju strogi pristup crne kutije, programi model-view-controller obično su nešto fleksibilniji, iako neke implementacije mogu otežati promjenu MVC programa ili modularno otklanjanje pogrešaka.
U određenim slučajevima, obrazac model-pogled-kontroler ne mora sadržavati samo jednu od svake komponente. Jedan primjer je aplikacija koja ima više prikaza, kao što je više monitora, ili zaslon koji se može vidjeti na nekoliko klijentskih uređaja. Višestruki prikazi i kontroleri mogu se koristiti u aplikaciji koja mnogim korisnicima omogućuje pristup bazi podataka, a svi odgovaraju jednom modelu. Češće je, međutim, dizajnirati sustave koji održavaju omjer jedan prema jedan komponenti model-pogled-kontroler.
Iako se komponente model-view-controller oslanjaju jedna na drugu, može biti mnogo lakše modificirati određene dijelove sustava koji koriste MVC uzorak nego da se uopće ne koristi uzorak, posebno u slučaju neobjektno orijentiranih aplikacije. Ako aplikacija koristi povratne pozive ili slušatelje i promatrače za implementaciju interakcija između komponenti, tada se svaka komponenta može promijeniti bez utjecaja na druge dvije. To znači da bi se novi GUI mogao implementirati bez utjecaja na model ili kontroler. Međutim, treba napomenuti da bi temeljne promjene sustava model-pogled-kontroler mogle zahtijevati malu količinu ponovnog kodiranja za svaku pojedinačnu komponentu.