Pregunta

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 opciones posibles están:

  • MVVM Toolkit
  • MVVM Foundation
  • WPF Application Framework (WAF)
  • MVVM ligero
  • Caliburn
  • Cincha
  • Prisma

Según tu experiencia, ¿cuál es mejor?

¿Fue útil?

Solución

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 ejemplos que lo ayuden. Voy a declarar un interés aquí, porque he participado activamente en al menos un marco MVVM, y he recibido comentarios de otros a través del grupo de Discípulos de WPF, por lo que estoy un poco sesgado. Diciendo eso, aquí va:

Microsofts MVVM Toolkit : esto es todavía mucho en las etapas alfa. Cuando fue lanzado originalmente, tomó un poco de salvajismo de los Discípulos por lo que no hizo. Dicho esto, MS está buscando reforzar este marco, así que es uno para ver, simplemente no está listo todavía.

MVVM Foundation : ah, la versión de Josh Smith del marco. Josh es uno de los papás de MVVM, y ha sido un gran defensor y maestro del patrón. Como resultado, gran parte 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 esto también será un marco compatible con Silverlight.

WAF : no tengo experiencia, por lo que no puedo hacer comentarios, me temo.

MVVM Light : la versión de Laurent Bugnion, que se acaba de actualizar a la versión 2. Este es un marco muy bueno, pero una vez más, no pretende cubrir todos los aspectos de las aplicaciones MVVM. Teniendo en cuenta los antecedentes de Laurent, tiene un sólido soporte de Silverlight y Blendability.

Actualizar 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. El objetivo de Onyx es complementar los marcos MVVM, y agrega funcionalidades que generalmente son difíciles de hacer para las personas en MVVM / WPF. Una vez más, originalmente estaba destinado a ser solo WPF, Onyx ha progresado para incluir la compatibilidad con SL, trabajo en el que estoy particularmente orgulloso de haber participado.

Prisma : una vez más, nunca lo he usado, pero he escuchado mucho buenas cosas al respecto.

Ocean - Karl Shifflett El Administrador de programas en el equipo Cider, lanzó recientemente un marco MVPM de WPF con todas las funciones. Nuevamente, este es un marco excelente y tiene muchas recomendaciones.

La conclusión es que, para descargar los diferentes marcos, échales un vistazo y descubre cuál encaja más intuitivamente con tu forma de pensar y con tus requisitos. Si crees que es posible que desees admitir Silverlight desde la misma base de código, entonces se deben descontar los marcos solo para WPF.

Otros consejos

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

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

Lo siento por la larga historia

Características comunes:

  

& # 8226; Clase ViewModelBase (para la implementación de la interfaz INotifyPropertyChanged)

     

& # 8226; RelayCommand como clase para vincular el comando UI a los controladores de ViewModel & # 8217; s

     

& # 8226; Las pruebas unitarias vienen con el framework

Cinch

  

& # 8226; Autor: Sacha Barber

     

& # 8226; Compatibilidad con Silverlight: no (Cinch versión 2 es compatible con Silverlight)

     

& # 8226; Documentación: excelente, 6 artículos publicados en CodeProject

     

& # 8226; Alojamiento: CodePlex

     

& # 8226; Licencia: Code Project Open License

     

& # 8226; Características:

     
      
  1. comportamientos adjuntos

  2.   
  3. validación utilizando IDataErrorInfo

  4.   
  5. compatibilidad con IEditableObject

  6.   
  7. Creación y suscripción de eventos débiles

  8.   
  9. mensajes de mediadores usando eventos débiles

  10.   
  11. Compatibilidad con IOC / DI (mediante Unity)

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

  14.   
  15. ayudantes de subprocesos

  16.   
  17. compatibilidad con elementos de menú

  18.   
  19. modelos de vista que se pueden cerrar

  20.   
  21. Generador de código MVVM

  22.   

MVVM Light Toolkit

  

& # 8226; Autor: Laurent Bugnion

     

& # 8226; Soporte de Silverlight: si

     

& # 8226; Documentación: muchos artículos disponibles en el blog de Laurent & # 8217; s + otros desarrolladores también

     

& # 8226; Alojamiento: CodePlex

     

& # 8226; Licencia: licencia MIT

     

& # 8226; Características:

     
      
  1. instalador de MSI

  2.   
  3. Proyecto de VS y plantilla de elemento

  4.   
  5. Fragmentos de código VS

  6.   
  7. Sistema de mensajería para la comunicación entre modelos de visualización

  8.   
  9. Controlar eventos como comandos

  10.   

Ayudantes de MVVM

  

& # 8226; Autor: Mark Smith

     

& # 8226; Soporte de Silverlight: no

     

& # 8226; Documentación: algunos artículos en el blog de Mark & ??# 8217; s

     

& # 8226; Hosting: sitio web personal

     

& # 8226; Licencia: no definida

     

& # 8226; Características:

     
      
  1. comportamientos adjuntos

  2.   
  3. creación de modelos de vista usando la extensión de marcado

  4.   
  5. validación basada en atributos

  6.   
  7. IOC / DI utilizando el enfoque del proveedor de servicios

  8.   
  9. modelo de vista que se puede cerrar

  10.   
  11. espera el cursor (usando el nuevo WaitCursor () {// tu código aquí})

  12.   

MVVM Foundation

  

& # 8226; Autor: Josh Smith

     

& # 8226; Soporte de Silverlight: no

     

& # 8226; Documentación: artículos sobre la implementación de Messenger en el blog de Josh o Marlon Grech # 8217;

     

& # 8226; Alojamiento: CodePlex

     

& # 8226; Licencia: MS-PL

     

& # 8226; Características:

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

  2.   
  3. Monitor de eventos PropertyChanged

  4.   

Caliburn

  

& # 8226; Autor: Rob Eisenberg

     

& # 8226; Soporte de Silverlight: si

     

& # 8226; Documentación: documentación en línea completa disponible

     

& # 8226; Alojamiento: CodePlex http://www.codeplex.com/caliburn

     

& # 8226; Licencia: licencia MIT

     

& # 8226; Características:

     
      Los comandos
  1. se construyen sobre Acciones y, por lo tanto, comparten muchas de las mismas funciones, incluidos múltiples parámetros de entrada, filtros y ejecución asíncrona automática

  2.   
  3. presentadores que manejan problemas del ciclo de vida de la IU, como el manejo de la semántica de desactivación, desactivación y apagado para varios componentes de la IU

  4.   
  5. Las aplicaciones de Caliburn son totalmente verificables

  6.   
  7. varias utilidades, como un administrador de tareas en segundo plano

  8.   
  9. admite varios patrones de IU (no solo MVVM)

  10.   
  11. contenedor de inyección de dependencia

  12.   

Onyx

  

& # 8226; Autor: William e Kempf

     

& # 8226; Soporte de Silverlight: no

     

& # 8226; Documentación: introducción básica disponible en CodePlex

     

& # 8226; Alojamiento: CodePlex

     

& # 8226; Licencia: no especificado

     

& # 8226; Características:

     
      
  1. patrón ServiceLocator

  2.   
  3. Creación de ViewModel con una extensión de marca personalizada

  4.   
  5. Servicios relacionados con la interfaz de usuario, como IDisplayMessage

  6.   

Calcio

  

& # 8226; Autor: Daniel Vaughan

     

& # 8226; Soporte de Silverlight: no

     

& # 8226; Documentación: 2 artículos muy detallados sobre CodeProject (parte 1 y parte 2)

     

& # 8226; Alojamiento: CodePlex

     

& # 8226; Licencia: use, copie, modifique y / o distribuya y mantenga los derechos de autor.

     

& # 8226; Características:

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

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

  4.   
  5. El servicio de comandos para asociar los comandos de WPF con interfaces de contenido que solo se activan cuando una vista activa o un modelo de vista implementa la interfaz

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

  8.   
  9. Registro de cliente-servidor listo para trabajar de forma inmediata

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

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

  14.   

nRoute

  

& # 8226; Autor: Rishi

     

& # 8226; Soporte de Silverlight: si

     

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

     

& # 8226; Alojamiento: CodePlex

     

& # 8226; Licencia: MS-PL

     

& # 8226; Características:

     
      
  1. admite los modelos de comportamientos y desencadenantes de Blend3

  2.   
  3. marco del localizador de recursos

  4.   
  5. servicios de visualización: OpenFileDialog, ShowMessage & # 8230;

  6.   
  7. usa los atributos para mapear View y ViewModel juntos

  8.   

Nito MVVM

  

& # 8226; Autor: Shammah

     

& # 8226; Soporte de Silverlight: no

     

& # 8226; Documentación: no

     

& # 8226; Alojamiento: CodePlex

     

& # 8226; Licencia: no especificado

     

& # 8226; Características:

     
      
  1. varias implementaciones amigables con MVVM de la interfaz ICommand
  2.   

Ocean

  

& # 8226; Autor: Karl Shifflet

     

& # 8226; Soporte de Silverlight: no

     

& # 8226; Documentación: artículos disponibles en el blog de Karl & # 8217; s

     

& # 8226; Hosting: sitio web personal

     

& # 8226; Licencia: no especificado

     

& # 8226; Características:

     
      
  1. escrito en VB.Net

  2.   
  3. validación basada en atributos

  4.   
  5. clases básicas de modelo de vista: comando de relé, closableviewmodel & # 8230;

  6.   
  7. capa de acceso a datos del servidor SQL

  8.   

Marco MVVM básico

  

& # 8226; Autor: Lester Lobo

     

& # 8226; Soporte de Silverlight: no

     

& # 8226; Documentación: muestra de aplicación disponible con la biblioteca

     

& # 8226; Alojamiento: CodePlex

     

& # 8226; Licencia: MS-PL

     

& # 8226; Características:

     
      
  1. Comandos delegados \ Keybinding

  2.   
  3. mensajes entre VM & # 8217; s

  4.   
  5. administrar eventos como comandos con comportamientos adjuntos

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

  8.   
  9. Fragmentos de código VS

  10.   

BoodLight

  

& # 8226; Autor: Peter O & # 8217; Hanlon & # 8226; asistencia de Silverlight: sí

     

& # 8226; Documentación: muestra de aplicación disponible con la biblioteca

     

& # 8226; Alojamiento: CodePlex

     

& # 8226; Licencia: MS-PL

     

& # 8226; Características:

     
      
  1. & # 8220; espacio de trabajo & # 8221; gestión (conjunto de documentos que pueden cerrarse)

  2.   
  3. soporte de piel

  4.   
  5. mensajes entre VM & # 8217; s

  6.   

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

MVVM Toolkit (Microsoft) es una biblioteca muy liviana con plantillas de proyectos de Visual Studio que deben ser compatibles con los principiantes con este patrón. Si Microsoft obtiene buenos comentarios para su Kit de herramientas, entonces podrían implementar esto como una nueva plantilla de proyecto de Visual Studio (quizás 2010).

Prism (Microsoft p & amp; 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 de WPF y / o Silverlight modulares . Cuando solo necesitas implementar el patrón MVVM o eres un principiante en .NET / WPF, no recomendaré este proyecto.  Consulte 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. Es un poco diferente a 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.

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

También mira:

Caliburn & amp; Onyx !

Mezcla el tuyo!

Utilicé EventAggregator de PRISM, con ViewModelBase de MVVM foundation 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 un solo marco per se.

Mi apuesta será en Caliburn y MVVMlight, parece que no muchos de estos marcos mvvm son compatibles con 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 la característica al marco mvvm. Supongo que la mejor manera de descubrir cuál es la que mejor se adapta a su proyecto será mediante el listado / comparación de sus características.

También puedes ver Mix10. Aprendo mucho de la charla: construyendo tu marco mvvm.

También Cocktail y DevForce framework por Ideablade

Estoy usando Prism y me gusta. Una de las cosas importantes para mí fue que habría otras personas ahí fuera que podrían ayudarme si fuera necesario y buenos ejemplos. Una vez que haya empezado a funcionar lo básico, hay una gran cantidad de extensiones que necesitará para su aplicación y es mucho más fácil cuando trabaja con el mismo marco que los demás.

En general, 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 genera un comando para mí, dada una función de delegado para iniciar en Ejecutar. Creo que podría cambiar a cualquier otro marco o sin marco en un par de horas.

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

Si está buscando Extensibilidad (la capacidad de escribir complementos) sobre el marco de una aplicación WPF / MVVM, es posible que esté interesado en SoapBox Core descargo de responsabilidad: lo escribí . Es de código abierto, así que incluso si no lo usas, podría haber algunas buenas ideas para ti. Utiliza MEF tanto para Extensibilidad como para IoC.

También hay nRoute

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

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