¿Cuál es la diferencia entre el controlador en MVC y ViewModel en MVVM?

21

No puedo ver la diferencia entre MVC y MVVM claramente. Siento que el comando en un modelo de vista es como el método de acción en un controlador. Y tanto el Controlador como ViewModel notificarán a la Vista que se actualice después de modificar el estado del Modelo a través del Enlace de Datos. ¿Cuál es la principal diferencia entre los dos patrones?

TomCaps
fuente

Respuestas:

25

El controlador y el ViewModel difieren de varias maneras.

En MVC, el controlador conoce la vista, puede cambiar la vista. También conoce el modelo y puede llamarlo. En MVVM, un ViewModel es una representación abstracta de la Vista y no conoce la interfaz de usuario concreta, envuelve el Modelo de manera que se pueda mostrar como se desee.

En MVC clásico, un controlador es solo una estrategia de la Vista para interactuar con el Modelo. De hecho, a veces ni siquiera es necesario un controlador. En MVVM no lo necesita, ya que puede tener diferentes ViewModels para la misma Vista si necesita diferentes comportamientos. En MVC podría tener, por ejemplo, un ReadOnlyController o un AdminController para comunicarse con el Modelo. En MVVM, podría tener dos ViewModels y elegir el que necesita para la Vista.

Pero tienen algunas similitudes. En ambos patrones, la Vista es un observador . En MVC clásico, la vista es un observador del modelo, en MVVM es un observador del ViewModel.

Ambos patrones están destinados a proporcionar una separación de preocupaciones. MVVM tiene como objetivo principal proporcionar una abstracción de la Vista, completamente independiente de la tecnología UI en uso. MVC no llega tan lejos. Su enfoque principal es la separación de las preocupaciones, para que no ponga la lógica de negocios (el Modelo) en la vista.

También puede encontrar útil esta respuesta mía a una pregunta similar.

Por último, debería decir que ambos patrones pertenecen a la misma familia. MVP, del cual MVVM es descendiente, es un hermano de MVC. Si quieres saber más, sigue este enlace al sitio web de Martin Fowler , explica todo en detalle.

Halcón
fuente
¿No crees que estas arquitecturas de vista de modelo son mejor entendidas por las personas que las implementan? Creo que es cuestión de elección para el desarrollador. Uno elige MVC o MVVM dependiendo de si quiere una abstracción total sobre la vista con un poco de sobrecarga (en el caso de MVVM).
Pankaj Upadhyay
@Pankaj Upadhyay: cuál debe usar depende de sus requisitos y elección de tecnología y también de las idiosincrasias de su plataforma.
Falcon
Creo que la arquitectura MVC es lo suficientemente buena para cualquier cosa, pero eso podría deberse a que no he enfrentado un problema que requiera particularmente MVVM. OMI, que sin duda necesita tener un cierto control sobre la vista, porque lo que es absolutamente suelta mejorará más errores en futuras actualizaciones
Pankaj Upadhyay
1
@Pankaj Upadhyay: Si desea utilizar la misma lógica para varias tecnologías de interfaz de usuario, MVP es superior. No creo que necesariamente necesites un poco de control sobre la vista. Puede ser totalmente independiente y también puede probar los ViewModels, si no mejor. La mejor separación también beneficia a los diseñadores, ya que el trabajo en el proyecto puede dividirse mejor.
Falcon