Model-view-controller (MVC) je vrsta programske arhitekture in vzorca oblikovanja, ki segmentira vsak element programa na dobro opredeljena področja funkcionalnosti. V arhitekturi model-pogled-krmilnik se model ukvarja z vso notranjo programsko logiko, ki manipulira, shranjuje, pridobiva in drugače obdeluje in izračunava podatke. Pogled pogleda je odgovoren za prikaz informacij iz modela za uporabnika, poleg tega pa zagotavlja način, da uporabnik poda vnos v program. Krmilnik jemlje vhod iz pogleda, ga oceni ali kako drugače obdela in v interakciji z modelom spremeni podatke ali stanje programa, ki se na koncu prikaže uporabniku skozi pogled. Čeprav zasnova model-gledalec-krmilnik zahteva program, ki zajema funkcionalnost, morajo trije odseki še vedno na nek način medsebojno delovati in so na splošno v nekem smislu odvisni drug od drugega, za razliko od drugih agresivnejših vzorcev oblikovanja.
Precej pogosto je vzorec model-pogled-krmilnik viden v aplikacijah, ki upravljajo grafični uporabniški vmesnik (GUI). Z uporabo vzorca MVC z različnimi vizualnimi elementi GUI upravlja pogled, s snemanjem in obdelavo, kje in kaj uporabnik klikne, upravlja krmilnik, dejansko spreminjanje informacij ali nalaganje informacij pa opravi model. Glede na natančno zasnovo aplikacije ima lahko vsaka komponenta vzorca MVC mehanizem za interakcijo z drugimi komponentami, na primer, da je model sposoben neposredno naročiti pogledu, naj osveži zaslon, ali pogled, ki lahko pove, krmilnik, da osvežuje zaslon in ne sprejema novega vnosa. Za razliko od nekaterih oblikovnih vzorcev, ki uporabljajo strog pristop črne škatle, so programi model-pogled-krmilnik nekoliko bolj prilagodljivi, čeprav lahko nekatere izvedbe otežijo spreminjanje ali modularno odpravljanje napak v programu MVC.
V določenih primerih ni nujno, da vzorec model-pogled-krmilnik vsebuje samo eno od vsake komponente. En primer je aplikacija, ki ima več pogledov, kot je več monitorjev, ali zaslon, ki ga je mogoče videti na več odjemalskih napravah. Več pogledov in krmilnikov je mogoče uporabiti v aplikaciji, ki omogoča številnim uporabnikom dostop do baze podatkov, vsi pa ustrezajo enemu modelu. Pogosteje pa je načrtovati sisteme, ki vzdržujejo razmerje ena proti ena komponent model-pogled-krmilnik.
Čeprav se komponente model-pogled-krmilnik zanašajo ena na drugo, je lahko veliko lažje spremeniti določene dele sistema, ki uporabljajo vzorec MVC, kot če vzorca sploh ne bi uporabili, zlasti v primeru nepredmetno usmerjenih aplikacije. Če aplikacija uporablja povratne klice ali poslušalce in opazovalce za izvajanje interakcij med komponentami, potem je mogoče vsako komponento spremeniti, ne da bi to vplivalo na drugi dve. To pomeni, da bi lahko implementirali nov GUI, ne da bi to vplivalo na model ali krmilnik. Vendar je treba opozoriti, da lahko temeljne spremembe sistema model-pogled-krmilnik zahtevajo nekaj manjšega prekodiranja za vsako posamezno komponento.