Model-view-controller (MVC) är en typ av mjukvaruarkitektur och designmönster som segmenterar varje element i ett program i väldefinierade funktionsområden. I model-view-controller-arkitektur behandlar modellen all intern programlogik som manipulerar, sparar, hämtar och på annat sätt hanterar och beräknar data. View-aspekten är ansvarig för att visa information från modellen för användaren, och den ger också ett sätt för användaren att ge input till programmet. Kontrollören tar input från vyn, bedömer eller på annat sätt bearbetar den och interagerar med modellen för att ändra data eller programtillstånd, vilket i slutändan visas för användaren genom vyn. Även om designen av modell-visare-kontroller kräver ett program för att kapsla in funktionalitet, måste de tre sektionerna fortfarande interagera med varandra på något sätt och är i allmänhet beroende av varandra i någon mening, till skillnad från andra mer aggressiva designmönster.
Ganska ofta ses modell-vy-kontroller-mönstret i applikationer som hanterar ett grafiskt användargränssnitt (GUI). Med hjälp av MVC-mönstret hanteras de olika visuella elementen i det grafiska användargränssnittet av vyn, registreringen och bearbetningen av var och vad en användare klickar på hanteras av kontrollenheten, och att faktiskt ändra information eller ladda information görs av modellen. Beroende på den exakta designen av en applikation kan varje komponent i MVC-mönstret ha en mekanism för att interagera med de andra komponenterna, som att modellen direkt kan instruera vyn att uppdatera skärmen eller att vyn har ett sätt att berätta kontrollenheten att den uppdaterar skärmen och inte accepterar ny inmatning. Till skillnad från vissa designmönster som har en strikt svart-box-strategi, tenderar modell-vy-kontrollerprogram att vara något mer flexibla, även om vissa implementeringar kan göra ett MVC-program svårt att ändra eller felsöka modulärt.
I vissa fall behöver modell-vy-kontroller-mönstret inte bara innehålla en av varje komponent. Ett exempel är en applikation som har flera vyer, till exempel flera bildskärmar, eller en skärm som kan ses på flera klientenheter. Flera vyer och kontroller kan användas i en applikation som tillåter många användare att komma åt en databas, alla svarar på en enda modell. Det är dock vanligare att designa system som upprätthåller ett ett-till-ett-förhållande mellan modell-vy-kontrollerkomponenterna.
Även om modell-vy-styrenhetskomponenter är beroende av varandra, kan det vara mycket lättare att modifiera vissa delar av ett system som använder MVC-mönstret än om inget mönster användes alls, särskilt i fallet med icke-objektorienterade applikationer. Om en applikation använder återuppringningar eller lyssnare och observatörer för att implementera interaktioner mellan komponenterna, kan varje komponent ändras utan att påverka de andra två. Detta innebär att ett nytt GUI kan implementeras utan att det påverkar modellen eller styrenheten. Det bör dock noteras att grundläggande förändringar av ett modell-vy-kontrollsystem kan kräva en liten mängd omkodning för varje enskild komponent.