mvc wpf model-view-controller design-patterns mvvm mvp

wpf - mvc - mvvm android



MVC/MVP/MVVM ¿Qué demonios? (2)

La Guía de arquitectura de aplicaciones de Microsoft describe MVC y MVP, y explora las diferencias entre los dos.

http://www.codeplex.com/AppArch

Este artículo de MSDN describe MVVM y su evolución.

http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

Recientemente trabajé en un proyecto .Net WPF para construir un sistema de punto de venta minorista donde usé el patrón MVP por primera vez. Me tomó un tiempo para entender el cambio de enfoque, pero una vez que lo hice, pensé que el concepto se estremeció.

Mi pregunta es esta: ¿cuál es la distinción entre MVC, MVP y MVVM? Si hay una distinción clara, ¿existen pautas sobre cuándo debe usar un patrón sobre otro?

Si alguien puede ofrecer una guía sobre esto, o señalar un artículo que explica las diferencias, lo agradecería muchísimo.


Puede ser difícil asimilar las diferencias entre patrones al observar un patrón particular implementado en un marco particular. Este artículo msdn http://msdn.microsoft.com/en-us/magazine/dd419663.aspx hace referencia a artículos originales de Martin Fowlers que explican un patrón como un enfoque general:

En 2004, Martin Fowler publicó un artículo sobre un patrón llamado Presentation Model (PM) [...] que considera que MVVM es una especialización del patrón PM más general, hecho a medida para las plataformas WPF y Silverlight.

Entonces, para comprender diferentes patrones, es útil mirar las descripciones de Martin Fowler de diferentes enfoques. Su patrón de Vista pasiva es el enfoque de MVP. Su patrón de Controlador Supervisor es el enfoque MVC. Su patrón de modelo de presentación es el enfoque MVVM. Este artículo anterior trata sobre la evolución de tales patrones.

También puede ser útil observar implementaciones en diferentes idiomas. El artículo La implementación de patrones de GUI basados ​​en eventos utilizando el marco ZK Java AJAX contrasta los tres patrones de Martin Fowler mencionados anteriormente en un marco Java moderno. Aunque es un lenguaje diferente y un marco diferente de WPF, puede ser útil ver el patrón en lugar de la implementación del patrón para verlo en un idioma diferente.