¿Qué marco para MVVM debo usar? [cerrado]

233

Estoy desarrollando una aplicación con el modelo MVVM, pero he llegado a un punto en el que necesito elegir qué marco usar.

Entre las posibles opciones están:

  • MVVM Toolkit
  • Fundación MVVM
  • Marco de aplicación de WPF (WAF)
  • MVVM ligero
  • Caliburn
  • Cincha
  • Prisma
  • IU reactiva

En tu experiencia, ¿cuál es mejor?

Rangel
fuente
14
+1 - Buena pregunta, pero por favor aclare 'mejor'. Los diferentes marcos brindan diferentes ventajas, lo mejor depende de sus requisitos. Esperamos las respuestas :)
Russell
Bueno, sería muy bueno que pueda usar con WPF y Silverlight, y con una curva de aprendizaje mínima.
Rangel
2
Es posible que también desee consultar Caliburn. codeplex.com/caliburn
Kent Boogaart
Lo siento Kent. ¿Cómo podría olvidar Caliburn?
Pete OHanlon
2
Cercano y viejo pero ... Hice mi primer proyecto usando Prism (respuesta a continuación) ya que necesito soporte de componentes. Mi último proyecto lo hice sin formato, sin marco en absoluto. Todo lo que necesita es una clase de comando y puede hacer MVVM sin un marco, eso es lo más ligero que puede obtener.
Dave

Respuestas:

194

Realmente depende de lo que esté tratando de lograr y de la cantidad de infraestructura que desee, además de la facilidad con la que puede encontrar muestras que lo ayuden. Voy a declarar un interés aquí, porque he estado involucrado activamente en al menos un marco MVVM, y he tenido aportes en otros a través del grupo Discípulos de WPF, así que estoy un poco parcial. Dicho esto, aquí va:

Microsofts MVVM Toolkit : esto todavía está muy en las etapas alfa. Cuando se lanzó originalmente, los Discípulos tomaron un poco de salvaje por lo que no hizo. Dicho esto, MS está buscando reforzar este marco para que sea uno para ver, simplemente aún no está listo.

Fundación MVVM - Ah, la versión del marco de Josh Smith. Josh es uno de los papás de MVVM, y ha sido un gran defensor y maestro del patrón. Como resultado, mucho de lo que encontrará en otros marcos tiene las huellas digitales de Josh por todas partes. El objetivo de este marco es proporcionar los conceptos básicos de MVVM y no abordar algunos de los problemas más esotéricos. Originalmente, esto estaba destinado solo para WPF, pero personas como Laurent Bugnion y yo hemos agregado funcionalidades / proyectos que significan que también será un marco compatible con Silverlight.

WAF : no tengo experiencia, así que no puedo comentarlo, me temo.

MVVM Light : la versión de Laurent Bugnion se acaba de actualizar a la versión 2. Este es un marco muy bueno, pero nuevamente no está destinado a cubrir todos los aspectos de las aplicaciones MVVM. Teniendo en cuenta los antecedentes de Laurent, tiene una gran compatibilidad con Silverlight y Blendability.

Actualización Laurent me acaba de informar que las versiones .NET 3.5 y .NET 4.0 son compatibles con las funciones. Wau para ir Laurent.

Cinch: el excelente marco MVVM de WPF de Sacha Barber. Esto cubre más terreno que los marcos de los que he hablado anteriormente. Es un marco excelente y aprovecha los conceptos cubiertos en el excelente proyecto Onyx de Bill Kempf . Onyx está destinado a complementar los marcos MVVM, y agrega una funcionalidad que generalmente ha sido difícil para las personas en MVVM / WPF. Nuevamente, originalmente destinado a ser solo WPF, Onyx ha progresado para incluir compatibilidad con SL, trabajo en el que estoy particularmente orgulloso de haber participado.

Prisma - Nuevamente, nunca lo he usado, pero he escuchado muchas cosas buenas al respecto.

Océano : Karl Shifflett, Gerente de programa en el equipo de Sidra, lanzó recientemente un marco MVPM WPF con todas las funciones. Nuevamente, este es un marco excelente y tiene mucho que recomendar.

La conclusión es: descargue los diferentes marcos, écheles un vistazo y descubra cuál encaja más intuitivamente con su forma de pensar y con sus requisitos. Si cree que puede querer admitir Silverlight desde la misma base de código, entonces los marcos de trabajo de WPF solo deberían descontarse.

Pete OHanlon
fuente
44
Yo uso uno que escribimos, porque tenemos necesidades muy especializadas para MVVM. Está fuertemente influenciado por el trabajo que hizo Josh, y lo lanzaré como Open Source en el futuro cercano (estoy ocupado arrancando los bits propietarios). Se llama Goldlight.
Pete OHanlon
Junto con eso, ¿cuál es su marco de capa de acceso a datos? chicos .. LINQ, LLBLGen, EF, nHibernate?
Jirapong
Depende del proyecto y los requisitos. A veces usamos LINQ, a veces NHibernate, a veces Castle ActiveRecord, y a veces eXpress Persistent Objects.
Pete OHanlon
3
Hola Pete, solo quiero comentar que MVVM Light Toolkit funciona igual para WPF 3.5 y WPF 4 que para Silverlight 3 y Silverlight 4. Tengo cuidado de mantener las características sincronizadas tanto como pueda. Sin embargo, tiene razón sobre la capacidad de mezcla, esta es una gran preocupación para mí :) Saludos, Laurent
LBugnion
1
Me ha decepcionado que MVVM Toolkit no se haya actualizado para que funcione con Visual Studio 2010. Puede que desee agregar eso al proceso de toma de decisiones. La mayoría de las personas que conozco usando plantillas MVVM en 2010 están usando MVVM Light y algunas migraron a eso solo por esta razón.
ScottCher
54

Encontré este artículo muy útil http://www.japf.fr/2009/10/a-quick-tour-of-existing-mvvm-frameworks/ Para que lo traiga aquí para los próximos usuarios

Actualizo la sección Cinch y agrego soporte Silverlight a sus características

Lo siento por la larga historia

Características comunes:

• Clase ViewModelBase (para la implementación de la interfaz INotifyPropertyChanged)

• RelayCommand como clase para vincular el comando de la interfaz de usuario a los controladores de ViewModel

• Las pruebas unitarias vienen con el marco

Cincha

• Autor: Sacha Barber

• Soporte Silverlight: no (Cinch versión 2 es compatible con Silverlight)

• Documentación: excelente, 6 artículos publicados en CodeProject

• Hospedaje: CodePlex

• Licencia: licencia abierta del proyecto de código

• Caracteristicas:

  1. comportamientos adjuntos

  2. validación usando IDataErrorInfo

  3. soporte para IEditableObject

  4. creación y suscripción de eventos débiles

  5. mensajes de mediador usando eventos débiles

  6. Soporte IOC / DI (usando Unity)

  7. servicios: registrador de eventos, cuadro de mensaje, abrir diálogo de guardar, ventana emergente

  8. ayudantes de enhebrado

  9. soporte para elementos de menú

  10. modelos de vista que se pueden cerrar

  11. Generador de código MVVM

MVVM Light Toolkit

• Autor: Laurent Bugnion

• Soporte Silverlight: sí

• Documentación: muchos artículos disponibles en el blog de Laurent + otros desarrolladores también

• Hospedaje: CodePlex

• Licencia: licencia MIT

• Caracteristicas:

  1. Instalador MSI

  2. Proyecto VS y plantilla de artículo

  3. Fragmentos de código VS

  4. Sistema de mensajería para la comunicación entre modelos.

  5. Manejo de eventos como comandos

MVVM Helpers

• Autor: Mark Smith

• Soporte Silverlight: no

• Documentación: algunos artículos en el blog de Mark.

• Hosting: sitio web personal

• Licencia: no definida

• Caracteristicas:

  1. comportamientos adjuntos

  2. creación del modelo de vista usando la extensión de marcado

  3. validación basada en atributos

  4. COI / DI utilizando el enfoque ServiceProvider

  5. viewable modelo

  6. cursor de espera (usando el nuevo WaitCursor () {// su código aquí})

Fundación MVVM

• Autor: Josh Smith

• Soporte Silverlight: no

• Documentación: artículos sobre la implementación de Messenger en el blog de Josh o Marlon Grech

• Hospedaje: CodePlex

• Licencia: MS-PL

• Caracteristicas:

  1. Sistema de mensajería para la comunicación entre modelos.

  2. Monitor de eventos PropertyChanged

Caliburn

• Autor: Rob Eisenberg

• Soporte Silverlight: sí

• Documentación: documentación completa en línea disponible.

• Alojamiento: CodePlex http://www.codeplex.com/caliburn

• Licencia: licencia MIT

• Caracteristicas:

  1. los comandos se crean sobre acciones y, por lo tanto, comparten muchas de las mismas características, incluidos múltiples parámetros de entrada, filtros y ejecución asincrónica automática

  2. presentadores que manejan el problema del ciclo de vida de la interfaz de usuario, como el manejo de la semántica de activación, desactivación y apagado de varios componentes de la interfaz de usuario

  3. Las aplicaciones de Caliburn son totalmente comprobables

  4. diversas utilidades, como un administrador de tareas en segundo plano

  5. admite varios patrones de IU (no solo MVVM)

  6. contenedor de inyección de dependencia

Ónix

• Autor: William e Kempf

• Soporte Silverlight: no

• Documentación: introducción básica disponible en CodePlex

• Hospedaje: CodePlex

• Licencia: no especificado

• Caracteristicas:

  1. Patrón ServiceLocator

  2. Creación de ViewModel usando una extensión de marcado personalizada

  3. Servicios relacionados con la interfaz de usuario, como IDisplayMessage

Calcio

• Autor: Daniel Vaughan

• Soporte Silverlight: no

• Documentación: 2 artículos muy detallados sobre CodeProject (parte1 y parte2)

• Hospedaje: CodePlex

• Licencia: ¡use, copie, modifique y / o distribuya y mantenga los derechos de autor!

• Caracteristicas:

  1. Administrador de módulos para habilitar o deshabilitar módulos en tiempo de ejecución

  2. servicios de mensajería para interactuar con el usuario desde el cliente o servidor utilizando la misma API

  3. Servicio de comandos para asociar comandos de WPF IC con interfaces de contenido que solo se activan cuando una vista activa o un modelo de vista implementan la interfaz

  4. Adaptadores de región para barras de herramientas y menús

  5. Registro de cliente-servidor listo para trabajar listo para usar

  6. Incluye módulos, como un navegador web, editor de texto, ventana de salida y muchos más.

  7. Interfaz con pestañas con indicación de archivo sucio (reutilizable en los módulos)

nRuta

• Autor: Rishi

• Soporte Silverlight: sí

• Documentación: muchos artículos disponibles en el blog del autor (consulte la página de inicio del proyecto CodePlex para ver los enlaces)

• Hospedaje: CodePlex

• Licencia: MS-PL

• Caracteristicas:

  1. admite comportamientos Blend3 y modelos de disparadores

  2. marco de localización de recursos

  3. ver servicios: OpenFileDialog, ShowMessage ...

  4. usa atributos para mapear View y ViewModel juntos

Nito MVVM

• Autor: Shammah

• Soporte Silverlight: no

• Documentación: no

• Hospedaje: CodePlex

• Licencia: no especificado

• Caracteristicas:

  1. Diversas implementaciones MVVM amigables de la interfaz ICommand

Oceano

• Autor: Karl Shifflet

• Soporte Silverlight: no

• Documentación: artículos disponibles en el blog de Karl.

• Hosting: sitio web personal

• Licencia: no especificado

• Caracteristicas:

  1. escrito en VB.Net

  2. validación basada en atributos

  3. clases base de viewmodel: comando de retransmisión, modelo de viewable closeable ...

  4. Capa de acceso a datos del servidor SQL

Marco básico de MVVM

• Autor: Lester Lobo

• Soporte Silverlight: no

• Documentación: aplicación de muestra disponible con la biblioteca

• Hospedaje: CodePlex

• Licencia: MS-PL

• Caracteristicas:

  1. Delegar comandos \ combinación de teclas

  2. mensajería entre máquinas virtuales

  3. manejo de eventos como comandos con comportamientos adjuntos

  4. manejo de diálogos (y más) como servicios

  5. Fragmentos de código VS

Buena luz

• Autor: Peter O'Hanlon • Soporte de Silverlight: sí

• Documentación: aplicación de muestra disponible con la biblioteca

• Hospedaje: CodePlex

• Licencia: MS-PL

• Caracteristicas:

  1. Gestión del "espacio de trabajo" (conjunto de documentos que se pueden cerrar)

  2. soporte de piel

  3. mensajería entre máquinas virtuales

Nasser Hadjloo
fuente
Buena publicación. Solo pensé agregar que Cinch versión 2 es compatible con Silverlight.
Kildareflare
44

Intento describir los marcos que faltan en la gran respuesta de Pete:

MVVM Toolkit (Microsoft) es una biblioteca muy ligera con plantillas de proyecto de Visual Studio que debería ser compatible con principiantes con este patrón. Si Microsoft recibe buenos comentarios sobre su Toolkit, podría implementar esto como una nueva plantilla de proyecto de Visual Studio (quizás 2010).

Prism (Microsoft p & p) es un marco que proporciona más que el soporte para el patrón MVVM. El objetivo principal de este proyecto es ayudarlo a construir aplicaciones modulares WPF y / o Silverlight. Cuando solo necesite implementar el patrón MVVM o sea un principiante en .NET / WPF, no recomendaré este proyecto. Ver también: Enlace .

WPF Application Framework (WAF) es un marco ligero que te ayuda a crear aplicaciones WPF con MVVM. Es solo para WPF y, por lo tanto, no es compatible con Silverlight. Va un poco más allá de la mayoría de los otros marcos MVVM con la introducción de Controladores . Son responsables del flujo de trabajo de la aplicación y median entre varios ViewModels.

jbe
fuente
19

Meh Mvvm realmente no requiere un marco completo para admitir IMO. Si comprende el concepto, es bastante sencillo comenzar con una clase base de VM limpia que implemente INotify, y simplemente ir desde allí.

Pierreten
fuente
44
Hay una razón por la cual muchos desarrolladores desarrollan la biblioteca mvvm. Si lo que dices es cierto, ¿por qué estos desarrolladores perderían su tiempo? ¿Por qué los usuarios de estos marcos seguirían usando su marco mvvm favorito? Es cierto que "Mvvm realmente no requiere un marco completo para admitir IMO". Pero no es práctico prescindir del marco MVVM.
Syaiful Nizam Yahya
3
-1 IMO escribiendo su propia clase RelayCommand para ICommands, una clase Messenger para comunicación entre VM y su propio contenedor IoC para mencionar solo las herramientas más básicas necesarias para una aplicación WPF que funcione bien, es una PITA importante. Su respuesta solo es válida para los programas más simples.
Heliac
10

¡Mezcla el tuyo!

Usé EventAggregator de PRISM, con ViewModelBase de la fundación MVVM y así sucesivamente. También modifiqué el RelayCommand (DelegateCommand llamado en algunos lugares) para aceptar otros datos también, y así sucesivamente.

No recomendaría solo un marco per se.

Andrei Rînea
fuente
19
Respetuosamente no estoy de acuerdo, el problema con este enfoque se revelará cuando obtenga nuevos miembros: el costo de entrada al proyecto será mucho mayor ya que los documentos internos generalmente no son la prioridad.
Florian Doyon
1
Puedo ver el punto sobre la documentación. Pero puede que no sea necesario desarrollar documentos internos. Los enlaces a los sitios externos con la documentación se pueden incrustar en el código mismo
Vasudevan Kannan
8

Mi apuesta será en Caliburn y MVVMlight, parece que no muchos de estos marcos mvvm admiten Silverlight. Puedo prever que habrá más marcos MVVM para elegir que los marcos IoC, porque es más difícil configurar el límite de características para el marco mvvm. Supongo que la mejor manera de averiguar cuál se adapta mejor a su proyecto será enumerando / comparando sus características.

También echa un vistazo a Mix10. Aprendí mucho de la charla: construir su marco mvvm.

MCSean
fuente
44
Esa charla me pareció bastante útil. Aquí hay un enlace directo: live.visitmix.com/MIX10/Sessions/EX15
anshul el
4

Estoy usando Prism y me gusta. Una de las grandes cosas para mí fue que habría otras personas que podrían ayudarme si fuera necesario y buenos ejemplos. Una vez que ejecutes los conceptos básicos, hay un montón de extensiones que necesitarás para tu aplicación y es mucho más fácil cuando trabajas con el mismo marco que otros.

Dave
fuente
2

Con todo, estoy 90% a través de mi aplicación y todo lo que he usado de MVVM Toolkit es la función de fábrica que construye un comando para mí dada una función de delegado para ejecutar en Ejecutar. Creo que podría cambiar a cualquier otro marco o ningún marco en un par de horas.

mico
fuente
2

Otro a considerar es MEFedMVVM . Lo he usado en un par de proyectos y es liviano, no intrusivo y es compatible con Silverlight y WPF. También es capaz de admitir datos en tiempo de diseño en Blend, para aquellos que usan ese producto.

John Rayner
fuente
1

Si está buscando Extensibilidad (la capacidad de escribir complementos) en la parte superior de un marco de aplicación WPF / MVVM, entonces puede estar interesado en el descargo de responsabilidad de SoapBox Core : lo escribí . Es de código abierto, por lo que incluso si no lo usa, puede haber algunas buenas ideas para usted. Utiliza MEF tanto para Extensibility como para IoC.

Scott Whitlock
fuente
1

También hay nRoute

Un marco de aplicación realmente agradable para WPF / Silverlight que admite MVVM

Daniel O
fuente