Model-view-controller (MVC) este un tip de arhitectură software și model de design care segmentează fiecare element al unui program în zone bine definite de funcționalitate. În arhitectura model-vedere-controler, modelul se ocupă de toată logica internă a programului care manipulează, salvează, preia și în alt mod manipulează și calculează datele. Aspectul de vizualizare este responsabil pentru afișarea informațiilor din model pentru utilizator și, de asemenea, oferă utilizatorului o modalitate de a da input programului. Controlerul preia intrarea din vizualizare, o evaluează sau o prelucrează în alt mod și interacționează cu modelul pentru a schimba datele sau starea programului, care în cele din urmă este afișată utilizatorului prin vizualizare. Deși designul model-viewer-controller necesită un program care să încapsuleze funcționalitatea, cele trei secțiuni încă trebuie să interacționeze între ele într-un fel și, în general, sunt dependente una de cealaltă într-un anumit sens, spre deosebire de alte modele de design mai agresive.
Destul de des, modelul model-view-controller este văzut în aplicațiile care gestionează o interfață grafică cu utilizatorul (GUI). Folosind modelul MVC, diferitele elemente vizuale ale GUI sunt gestionate de vizualizare, înregistrarea și procesarea unde și pe ce face clic pe utilizator este gestionată de controler, iar schimbarea informațiilor sau încărcarea informațiilor este realizată de model. În funcție de designul exact al unei aplicații, fiecare componentă a modelului MVC poate avea un mecanism pentru a interacționa cu celelalte componente, cum ar fi modelul care poate instrui direct vizualizarea să reîmprospăteze ecranul sau vizualizarea având o modalitate de a spune controlerul că reîmprospătează ecranul și nu acceptă o nouă intrare. Spre deosebire de unele modele de design care adoptă o abordare strictă de tip cutie neagră, programele model-view-controller tind să fie puțin mai flexibile, deși unele implementări pot face un program MVC dificil de modificat sau de depanat modular.
În anumite cazuri, modelul model-vedere-controler nu trebuie să conțină doar una din fiecare componentă. Un exemplu este o aplicație care are mai multe vizualizări, cum ar fi mai multe monitoare sau un afișaj care poate fi văzut pe mai multe dispozitive client. Mai multe vizualizări și controlere pot fi utilizate într-o aplicație care permite multor utilizatori să acceseze o bază de date, toate răspunzând la un singur model. Cu toate acestea, este mai obișnuit să se proiecteze sisteme care mențin un raport unu-la-unu al componentelor model-vedere-controller.
Chiar dacă componentele model-view-controller se bazează una pe cealaltă, poate fi mult mai ușor să modificați anumite părți ale unui sistem care utilizează modelul MVC decât dacă nu ar fi folosit niciun model, mai ales în cazul non-orientate pe obiecte. aplicatii. Dacă o aplicație folosește apeluri inverse sau ascultători și observatori pentru a implementa interacțiuni între componente, atunci fiecare componentă poate fi schimbată fără a le afecta pe celelalte două. Aceasta înseamnă că o nouă GUI ar putea fi implementată fără a afecta modelul sau controlerul. Trebuie remarcat, totuși, că modificările fundamentale ale unui sistem model-view-controller ar putea necesita o cantitate mică de recodificare pentru fiecare componentă individuală.