Pregunta

Estoy trabajando en una aplicación WPF, y estoy estructurarlo utilizando el patrón MVVM. Inicialmente tenía una idea de que los ViewModels deben ser reutilizables, pero ahora no estoy muy seguro ya.

  • ¿Debo ser capaz de volver a utilizar mis ViewModels si necesito una funcionalidad similar para una aplicación Windows Forms?
  • Silverlight no admite todas las cosas WPF no - debería ser capaz de volver a utilizar para aplicaciones de Silverlight?
  • ¿Qué pasa si quiero hacer una interfaz gráfica de usuario de Linux para mi aplicación. Entonces necesito el modelo de vista para construir en Mono - Es esto algo que debería procurar que la?
  • Y así sucesivamente ..

Por lo tanto; debe uno escribir clases ViewModel con una vista específica en mente, o pensar en la reutilización?

¿Fue útil?

Solución

Para responder a su pregunta, piense acerca de la responsabilidad individual Principio:

  

"Una clase debe tener una, y sólo   uno, razón para cambiar ".

Yo diría que, dentro de lo razonable, por lo general no desea volver a utilizar un modelo de vista de múltiples puntos de vista. La razón principal por la que diría de esto, es porque eso daría su modelo de vista más de una razón para cambiar. En otras palabras, sería necesario cambiar si uno o los otros cambios de vista, y en mi opinión, que es dos razones para cambiar. ¿Dónde se detiene? Me guardo simple en este caso, y se unen un modelo de vista a la vista.

Otra cosa que pensar con MVVM con WPF es de datos de plantillas. Es mucho más fácil de lograr si cada modelo de vista abastece a una y sólo una visión.

Otros consejos

Sólo en general, aplicar la principl YAGNI - es probable que no va a necesitar. A menos que se puede ver estas cosas como potencialmente sucediendo, me gustaría mantener con el enfoque más simple para obtener su software que trabaja para las necesidades que tiene actualmente.

En mi mente, el objetivo principal de MVVM es eliminar el código que no se puede probar fácilmente mediante pruebas unitarias . Puesto que un modelo de vista puede ser la unidad a prueba, pero una vista no puede, esto se consigue haciendo que la vista tan tontos como sea posible. Idealmente, como se puede hacer con XAML, la vista es completamente declarativas y sólo los datos-se toma de un modelo de vista. De ahí que el "no código detrás de" mantra.

Reutilización del modelo de visión a través de diferentes tecnologías de interfaz de usuario no es realmente un objetivo de MVVM. Si lo pruebas probablemente se verá tentado a mover el código específico de la tecnología de interfaz de usuario a la vista de nuevo para mantener a la vista del modelo reutilizable. Esto iría en contra del objetivo principal de la capacidad de prueba.

Si realmente encuentras que necesitan para soportar diferentes tecnologías de interfaz de usuario, entonces se podría todavía factorizar la lógica común de los modelos de vista en una capa de "presentación" compartida. Yo no haría que hasta asegurarse de que es necesario sin embargo.

Esta es una vieja cuestión, por lo que dudó en añadir otra respuesta. Pero todas las respuestas publicadas hasta ahora han perdido el punto. La respuesta de MSDN es muy clara : El modelo de vista es muy específicamente destinado a ser compartida por muchos puntos de vista a través de diversos sistemas operativos, como se ha demostrado en esta figura:

introducir descripción de la imagen aquí

Hacer lo contrario conduciría inevitablemente a código redundante.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top