MVP, MVC, MVVM, è tutto MOLTO simile. La differenza è principalmente nel punto esatto in cui accadono certe cose, e esattamente con quale livello l'utente interagisce:
Client spesso / Smart Client - Le classi View sono l '"oggetto dio". Il codice immediatamente dietro l'interfaccia utente visualizzata sa tutto ciò di cui ha bisogno per svolgere il proprio lavoro, inclusa la conoscenza del dominio, possibilmente il DAL (se non si utilizza Active Record) e la maggior parte delle regole relative alla convalida dei dati. La maggior parte delle app WinForms usa questa architettura, e anche molte app "vanilla ASP.NET" hanno uno strato molto spesso proprio contro il generatore HTML di ASP che gestisce la maggior parte di questo.
MVC - Il controller è "l'oggetto dio". È l'oggetto più direttamente interfacciato dall'utente, e genera o aggiorna un livello di presentazione estremamente "stupido" (View) basato sulla logica di business che gli fornisce la conoscenza del Modello. Il Modello può contenere una logica di business superiore o può riguardare solo l'integrità dei dati. Il miglior esempio che riesco a pensare è nei videogiochi; l'utente vede uno schermo video con l'azione in corso, ma per la maggior parte non funziona direttamente con quella vista per fare qualcosa. Invece c'è un HID nelle sue mani, e quando lo usa, i segnali vengono inviati alla logica all'interno della Console che incorporano quei dati e aggiornano lo schermo. Qualcuno potrebbe obiettare che qualsiasi app che usa un mouse o una tastiera è MVC con questa definizione, ma lo contatteremo dal concetto del livello superiore dell'applicazione (e non dal sistema operativo su cui risiede), ovunque ci sia un cursore o un puntatore che è il bersaglio diretto dell'input tramite un HID, ovvero una rappresentazione astratta della mano dell'utente che interagisce con gli elementi dell'interfaccia utente.
MVP - Il controller di MVC viene sostituito con un Presenter meno potente e più per uso singolo. Il Presenter funge comunque da intermediario tra Visualizza e Modello, ma la Vista spesso acquisisce alcune responsabilità, come la gestione degli eventi dell'interfaccia utente. Il Presentatore agisce per fornire alla Vista i dati necessari dal Modello in modo facile da assorbire; o DTO o proprietà associabili. Questa architettura consente la separazione delle preoccupazioni nelle app GUI rispetto all'architettura Spessa / Smart Client, consentendo al tempo stesso all'interfaccia utente di essere il livello con cui l'utente interagisce concettualmente e può essere realizzato con la maggior parte delle lingue / architetture.
MVVM - Il Presentatore recupera alcune responsabilità dalla Vista e diventa una "fonte di associazione" per la Vista. La vista fornisce solo la logica di base, basandosi invece sui "punti di legame" disponibili su ViewModel. Tutta la vista sa come fare è ottenere e impostare le informazioni fornite da "binding di dati" e invocare la logica esposta attraverso "binding di eventi". MVVM come termine è stato coniato da Microsoft per descrivere Windows Presentation Foundation, in cui la vista è strutturata in base ai file di markup XAML a cui viene assegnata la logica tramite collegamenti definibili alla classe ViewModel.