Model-view-controller (MVC) è un tipo di architettura software e modello di progettazione che segmenta ogni elemento di un programma in aree di funzionalità ben definite. Nell’architettura model-view-controller, il modello si occupa di tutta la logica interna del programma che manipola, salva, recupera e gestisce e calcola in altro modo i dati. L’aspetto vista è responsabile della visualizzazione delle informazioni dal modello per l’utente e fornisce anche un modo per l’utente di fornire input al programma. Il controller prende input dalla vista, lo valuta o lo elabora in altro modo e interagisce con il modello per modificare i dati o lo stato del programma, che alla fine viene mostrato all’utente attraverso la vista. Sebbene il design del modello-visualizzatore-controllore richieda un programma per incapsulare la funzionalità, le tre sezioni devono ancora interagire tra loro in qualche modo e generalmente dipendono l’una dall’altra in un certo senso, a differenza di altri modelli di progettazione più aggressivi.
Molto spesso, il pattern model-view-controller è presente nelle applicazioni che gestiscono un’interfaccia utente grafica (GUI). Utilizzando il pattern MVC, i diversi elementi visivi della GUI sono gestiti dalla vista, la registrazione e l’elaborazione di dove e cosa fa clic un utente viene gestita dal controller, e in realtà la modifica delle informazioni o il caricamento delle informazioni viene eseguita dal modello. A seconda del design esatto di un’applicazione, ogni componente del pattern MVC può avere un meccanismo per interagire con gli altri componenti, ad esempio il modello è in grado di istruire direttamente la vista per aggiornare lo schermo o la vista ha un modo per dire al controller che sta aggiornando lo schermo e di non accettare nuovi input. A differenza di alcuni modelli di progettazione che adottano un rigoroso approccio black-box, i programmi model-view-controller tendono ad essere leggermente più flessibili, sebbene alcune implementazioni possano rendere difficile la modifica o il debug di un programma MVC in modo modulare.
In alcuni casi, il pattern model-view-controller non deve contenere solo uno di ciascun componente. Un esempio è un’applicazione con più visualizzazioni, come più monitor, o un display che può essere visto su più dispositivi client. È possibile utilizzare più viste e controller in un’applicazione che consente a molti utenti di accedere a un database, rispondendo tutti a un unico modello. È più comune, tuttavia, progettare sistemi che mantengano un rapporto uno a uno dei componenti del controller di visualizzazione del modello.
Anche se i componenti del controller di visualizzazione del modello dipendono l’uno dall’altro, può essere molto più semplice modificare alcune parti di un sistema che utilizzano il modello MVC rispetto a quando non è stato utilizzato alcun modello, specialmente nel caso di modelli non orientati all’oggetto applicazioni. Se un’applicazione utilizza callback o listener e osservatori per implementare le interazioni tra i componenti, ciascun componente può essere modificato senza influire sugli altri due. Ciò significa che è possibile implementare una nuova GUI senza influire sul modello o sul controller. Va notato, tuttavia, che le modifiche fondamentali a un sistema modello-vista-controllore potrebbero richiedere una piccola quantità di ricodifica per ogni singolo componente.