color change bar model-view-controller design-patterns mvvm mvp presentation-model

model-view-controller - change - swift 4 navigation bar title color



¿Cuáles son las diferencias entre el presentador, el modelo de presentación, el modelo de vista y el controlador? (5)

Además de las grandes lecturas ya mencionadas (Fowler & Miller) y para responder a su punto sobre las diferencias entre controlador / presentador / ... desde el punto de vista del desarrollador :

Controlador en MVC :

  • El controlador es el componente real que se llama como resultado de la interacción del usuario. (El desarrollador no tiene que escribir código para delegar llamadas al controlador).

  • El controlador obtiene valores actuales de alguna manera de la Vista / contexto / bolsa / lo que sea, pero realmente no diría que interactúa con la Vista.

  • El controlador decide al final qué vista mostrar al usuario. En eso, el controlador muestra una noción explícita de flujo de trabajo de navegación de la aplicación también.

Presentador en MVP :

  • El presentador tiene métodos llamados por la Vista, que es el componente real que recibe el control de la interacción del usuario. (El desarrollador debe escribir un código en la Vista para llamar al Presentador).

  • El presentador obtiene de algún modo los valores actuales de la Vista o los recibe de la Vista previa llamada. Presentador llama a métodos en la Vista para establecer su estado ( poblarlo, dice Josh Smith). Un método de vista llamado por el presentador puede tener varias configuraciones pequeñas realizadas en su cuerpo.

  • El presentador no muestra explícitamente una noción del flujo de trabajo de la aplicación. Por lo general, se piensa que devuelve el control a la vista llamante.

PresentationModel en PM :

  • PresentationModel tiene métodos llamados por la Vista, que es el componente real que recibe el control sobre la interacción del usuario. (El desarrollador debe escribir un código en la Vista para llamar a PresentationModel).

  • PresentationModel tiene una comunicación mucho más habladora con View en comparación con un presentador. También contiene más lógica para determinar el valor de todas las configuraciones para aplicar en la Vista y para establecerlas en la Vista. (Esos métodos de Vista a su vez casi no tienen lógica).

  • PresentationModel no muestra explícitamente una noción del flujo de trabajo de la aplicación. Por lo general, se piensa que devuelve el control a la vista llamante.

ViewModel en MVVM :

  • ViewModel tiene métodos llamados (y propiedades establecidas) por la Vista, que es el componente real que recibe el control de la interacción del usuario. (El desarrollador tiene que escribir un código (declarativo) en la Vista para llamar a ViewModel).

  • ViewModel no tiene una comunicación explícitamente habladora con View en comparación con PresentationModel (es decir, no llama a View mucho, el framework lo hace). Pero tiene muchas propiedades que asignan 1 a 1 con la configuración de Vista. Todavía contiene la misma lógica para descubrir el valor de todas esas configuraciones.

  • ViewModel no muestra explícitamente una noción del flujo de trabajo de la aplicación. Por lo general, se piensa que devuelve el control a la vista llamante.

  • Copiando de alguna manera lo que dice Josh Smith ( http://msdn.microsoft.com/en-us/magazine/dd419663.aspx ): el patrón MVVM es un caso especial de PM que aprovecha un marco (como WPF / SL) para para escribir menos código

Tengo una idea bastante aproximada de cómo funcionan cada uno de estos patrones y conozco algunas de las pequeñas diferencias que existen entre ellos, pero, ¿son realmente tan diferentes entre sí?

Me parece que el presentador, el modelo de presentación, el modelo de vista y el controlador son esencialmente el mismo concepto.

¿Por qué no podría clasificar todos estos conceptos como controladores? Siento que podría simplificar mucho la idea.

¿Alguien puede dar una descripción clara de sus diferencias?

Quiero aclarar que entiendo cómo funcionan los patrones y que he implementado la mayoría de ellos en una tecnología u otra. Lo que realmente estoy buscando es la experiencia de alguien con uno de estos patrones, y por qué no considerarían a su ViewModel como un controlador, por ejemplo.

Daré algunos puntos de reputación por esto, pero estoy buscando una muy buena respuesta.


Al menos en .Net, MVP se usa como un patrón de diseño. Esto generalmente se usa con aplicaciones de Windows Forms, o ASP.Net clásico. Con MVC y MVVC, estos se usan generalmente con ASP MVC, que usa una arquitectura bastante diferente de la ASP.Net normal.


En mi opinión, no existen diferencias conceptuales reales entre MVP, MVVC, MVC y Presentation Model. Existen algunas diferencias detalladas, pero al final, puede seguir considerándose una configuración de Model View Controller. El nombramiento adicional solo sirve para crear confusión, y creo que sería mejor adoptar una terminología que permita una cierta cantidad de latitud al describir un controlador.


La diferencia entre ellos radica esencialmente en la cantidad de código en la vista. La elección entre ellos es, de hecho, una elección de tecnología para aplicaciones como WFP, WinForms, ASP MVC (2). La idea básica de separar la lógica de la presentación es la misma.

Here hay un artículo muy bueno sobre los tres.

EDITAR:

One artículo más - comparación.


Martin Fowler tiene una página sobre patrones de diseño de interfaz de usuario, en la que define y luego habla sobre MVC, MVP y otros patrones.

http://martinfowler.com/eaaDev/uiArchs.html

Un controlador está activo en el control de la IU. Por ejemplo, manejaría cualquier evento desencadenado por la interfaz de usuario y trataría con ellos adecuadamente.

Un presentador, por otro lado, es más pasivo, y simplemente muestra datos a través de la interfaz de usuario, que maneja sus propios eventos, etc., o los delega a un servicio o comando a través del presentador.

Un ViewModel es un ejemplo específico de un Presentador, diseñado para usar con el enlace WPF / Silverlight.

Un modelo de presentación es un modelo que puede ser presentado directamente por la vista, por lo que, por ejemplo, si sus modelos implementan INotifyPropertyChanged para el enlace de datos, serían modelos de presentación.