Ci sono molte risposte alla domanda, ma ho sentito che c'è bisogno di una risposta davvero semplice che paragona chiaramente le due cose. Ecco la discussione che ho fatto quando un utente cerca il nome di un film in un'app MVP e MVC:
Utente: fai clic fai clic ...
Visualizza : chi è quello? [ MVP | MVC ]
Utente: ho appena fatto clic sul pulsante di ricerca ...
Visualizza : Ok, aspetta un secondo .... [ MVP | MVC ]
( Visualizza la chiamata al Presenter | Controller ...) [ MVP | MVC ]
Visualizza : Hey Presenter | Controller , un utente ha appena fatto clic sul pulsante di ricerca, cosa devo fare? [ MVP | MVC ]
Presentatore | Controller : Hey View , c'è un termine di ricerca su quella pagina? [ MVP | MVC ]
Visualizza : Sì, eccolo ... "piano" [ MVP | MVC ]
Presentatore : Grazie Visualizza , ... nel frattempo sto cercando il termine di ricerca sul Modello , per favore mostragli una barra di avanzamento [ MVP | MVC ]
( Presentatore | Il controller chiama il modello ...) [ MVP | MVC ]
Presentatore | Controller : Hey Model , hai qualche corrispondenza con questo termine di ricerca ?: "piano" [ MVP | MVC ]
Modello : Hey Presenter | Controller , fammi controllare ... [ MVP | MVC ]
(Il modello sta eseguendo una query nel database del film ...) [ MVP | MVC ]
( Dopo un po ... )
-------------- Qui è dove MVP e MVC iniziano a divergere ---------------
Modello : ho trovato un elenco per te, presentatore , eccolo in JSON “[{" name ":" Piano Teacher "," year ": 2001}, {" name ":" Piano "," year ": 1993} ] "[ MVP ]
Modello : sono disponibili dei risultati, controller . Ho creato una variabile di campo nella mia istanza e l'ho riempita con il risultato. Il suo nome è "searchResultsList" [ MVC ]
( Presentatore | Controller ringrazia Model e torna alla vista ) [ MVP | MVC ]
Presentatore : Grazie per l'attesa di View , ho trovato un elenco di risultati corrispondenti per te e li ho organizzati in un formato presentabile: ["Piano Teacher 2001", "Piano 1993"]. Si prega di mostrarlo all'utente in un elenco verticale. Inoltre, nascondi ora la barra di avanzamento [ MVP ]
Controller : Grazie per aver atteso View , ho chiesto a Model la tua query di ricerca. Dice che ha trovato un elenco di risultati corrispondenti e li ha memorizzati in una variabile denominata "searchResultsList" all'interno della sua istanza. Puoi ottenerlo da lì. Inoltre, nascondi ora la barra di avanzamento [ MVC ]
Visualizza : Grazie mille Presentatore [ MVP ]
Vista : grazie "Controller" [ MVC ] (Ora la Vista si sta interrogando: come devo presentare all'utente i risultati che ottengo dal Modello ? L'anno di produzione del film dovrebbe essere il primo o l'ultimo ...? essere in un elenco verticale o orizzontale? ...)
Nel caso tu sia interessato, ho scritto una serie di articoli che trattano di modelli architetturali di app (MVC, MVP, MVVP, architettura pulita, ...) accompagnati da un repository Github qui . Anche se l'esempio è scritto per Android, i principi sottostanti possono essere applicati a qualsiasi supporto.