Hay muchas respuestas a la pregunta, pero sentí que era necesaria una respuesta realmente simple que comparara claramente las dos. Aquí está la discusión que hice cuando un usuario busca el nombre de una película en una aplicación MVP y MVC:
Usuario: Haga clic, haga clic ...
Ver : ¿Quién es ese? [ MVP | MVC ]
Usuario: Acabo de hacer clic en el botón de búsqueda ...
Ver : Ok, espera un segundo ... [ MVP | MVC ]
( Ver llamar al presentador | Controlador ...) [ MVP | MVC ]
Ver : Hola presentador | Controlador , un usuario acaba de hacer clic en el botón de búsqueda, ¿qué debo hacer? [ MVP | MVC ]
Presentador | Controlador : Hey Vista , ¿hay algún término de búsqueda en esa página? [ MVP | MVC ]
Ver : Sí, ... aquí está ... "piano" [ MVP | MVC ]
Presentador : Gracias Ver , ... mientras busco el término de búsqueda en el Modelo , muéstrele una barra de progreso [ MVP | MVC ]
( Presentador | El controlador está llamando al Modelo ...) [ MVP | MVC ]
Presentador | Controlador : Hola Modelo , ¿Tiene alguna coincidencia para este término de búsqueda ?: “piano” [ MVP | MVC ]
Modelo : Hola presentador | Controlador , déjame comprobar ... [ MVP | MVC ]
(El modelo está haciendo una consulta a la base de datos de películas ...) [ MVP | MVC ]
( Después de un tiempo ... )
-------------- Aquí es donde MVP y MVC comienzan a divergir ---------------
Modelo : Encontré una lista para usted, Presentador , aquí está en JSON “[{" name ":" Piano Teacher "," year ": 2001}, {" name ":" Piano "," year ": 1993} ] ”[ MVP ]
Modelo : hay algunos resultados disponibles, controlador . Creé una variable de campo en mi instancia y la rellené con el resultado. Su nombre es "searchResultsList" [ MVC ]
( Presentador | Controlador agradece al Modelo y vuelve a la Vista ) [ MVP | MVC ]
Presentador : Gracias por esperar Vista , encontré una lista de resultados coincidentes para usted y los arreglé en un formato presentable: ["Profesor de piano 2001", "Piano 1993"]. Muéstralo al usuario en una lista vertical. También oculta la barra de progreso ahora [ MVP ]
Controlador : Gracias por esperar Vista , le he preguntado a Model sobre su consulta de búsqueda. Dice que ha encontrado una lista de resultados coincidentes y los ha almacenado en una variable llamada "searchResultsList" dentro de su instancia. Puedes conseguirlo desde allí. También oculta la barra de progreso ahora [ MVC ]
Ver : Muchas gracias Presentador [ MVP ]
Vista : Gracias "Controlador" [ MVC ] (Ahora la Vista se cuestiona a sí misma: ¿Cómo debo presentar los resultados que obtengo del Modelo al usuario? ¿Debería el año de producción de la película ser el primero o el último ...? ¿Debería estar en una lista vertical u horizontal? ...)
En caso de que le interese, he estado escribiendo una serie de artículos que tratan sobre patrones arquitectónicos de aplicaciones (MVC, MVP, MVVP, arquitectura limpia, ...) acompañados por un repositorio de Github aquí . Aunque la muestra está escrita para Android, los principios subyacentes se pueden aplicar a cualquier medio.