Model-view-controller (MVC) (někdy také nesprávně označovaná jako Model-2) je softwarová architektura, která rozděluje datový model aplikace, uživatelské rozhraní a řídicí logiku do tří nezávislých komponent tak, že modifikace některé z nich má jen minimální vliv na ostatní.
MVC je často chápán jako návrhový vzor, nicméně se týká architektury aplikací mnohem více než klasický návrhový vzor. Tudíž může být užitečný pojem architektonický vzor (architectural pattern; Buschmann, et al 1996) nebo také agregační návrhový vzor (aggregate design pattern)[1].
Existuje také architektura Model 1, která odděluje pouze datový model od uživatelského rozhraní s řídicí logikou.
Obecně řečeno, vytváření aplikací s využitím architektury MVC vyžaduje vytvoření tří komponent, mezi které patří:
Komponenty řadič a pohled jsou ve standardním rozdělení vrstev na prezentační, doménovou a datovou obvykle zařazovány jako prezentační vrstva. V MVC je tato prezentační vrstva rozdělena mezi komponenty řadič a pohled, nicméně nejdůležitější rozdělení je mezí prezentací a doménovou vrstvou.
Ačkoliv může být koncept MVC realizován různým způsobem, obecně platí tento princip:
Tento vzor poprvé popsal Trygve Reenskaug v roce 1979. Poprvé byl použit v jazyce Smalltalk, vyvíjeném v Xerox research labs. Touto implementací bylo inspirováno mnoho dalších projektů, např.:
Občas je možné se setkat s tvrzením, že Swing (knihovna pro tvorbu grafického uživatelského rozhraní v Javě) také užívá MVC. To není pravda, neboť tato knihovna slučuje řadič a pohled do jedné komponenty a tudíž užívá jednodušší vzor Model 1.
V současné době se koncept MVC užívá především jako architektura webových aplikací. U složitějších aplikací je to způsob, jak zajistit jejich flexibilitu a spolehlivost i při častých změnách a jejich rychlém vývoji. Tento vzor bývá často pochopen nesprávně a mnoho aplikací tvrdí, že jej využívají, ačkoliv fakticky nesplňují základní požadavek, kterým je oddělení aplikační a prezentační logiky.
Z návrhnového vzoru MVC vychází například i vzor HMVC, který využívá například framework Kohana