La differenza principale tra MVC e MVT è che in un pattern Model View Controller, dobbiamo scrivere tutto il codice specifico del controllo. Ma in un MVT, la parte del controller è gestita dal framework stesso.
Lasciatemi spiegare questo con un esempio. Immagina di dover visualizzare un elenco di libri che hai in una libreria, archiviata è una tabella denominata libri. Nell'architettura MVC, devi scrivere il codice per recuperare la lista dei libri dal database, scrivere il livello di presentazione (sto parlando di HTML, CSS), mapparlo con un URL e inviarlo all'utente. Ma in framework come Django (utilizza l'architettura MVT), non è necessario scrivere alcun codice relativo al recupero dei dati dal database e alla mappatura con l'URL. Tutte queste attività sono gestite dal framework stesso. L'unica cosa che devi fare è dire al framework quali dati devono essere presentati all'utente (tabella Books). Il framework creerà quindi una visualizzazione basata sui dati e la invierà all'utente.
Il classico pattern MVC funziona gestendo lo stato di un'applicazione. Quando un utente esegue un'azione o effettua una richiesta, viene richiamata un'azione nel controller. Il controller quindi dice al modello di apportare modifiche e aggiornare la vista o restituisce una vista basata su un modello. Quindi possiamo dire che la vista è controllata dal controller e dal modello.
Tuttavia, MVT adotta un approccio leggermente diverso. Quando un utente effettua una richiesta HTTP, la vista corrispondente esegue una query sul modello e raccoglie il set di risultati dal modello. La vista quindi riempie il risultato in un modello e lo invia all'utente.
A differenza di MVC, la vista non è accoppiata a un modello. Ciò rende MVT liberamente accoppiato e facile da modificare.