wpf - ¿Qué marco para MVVM debo usar?
frameworks (13)
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 se encuentran:
- Kit de herramientas MVVM
- Fundación MVVM
- Marco de aplicación WPF (WAF)
- Luz MVVM
- Caliburn
- Cincha
- Prisma
En tu experiencia, ¿cuál es mejor?
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 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.
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 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 UI a los controladores de ViewModel
• Las pruebas unitarias vienen con el marco.
Cincha
• Autor: Sacha Barber
• Soporte de Silverlight: no (Cinch versión 2 es compatible con Silverlight)
• Documentación: excelente, 6 artículos publicados en CodeProject.
• Hosting: CodePlex
• Licencia: Code Project Open License
• Caracteristicas:
conductas adjuntas
validación utilizando IDataErrorInfo
soporte para IEditableObject
Creación y suscripción de eventos débiles.
Mensajería mediadora usando eventos débiles
Soporte IOC / DI (utilizando Unity)
Servicios: registrador de eventos, cuadro de mensaje, cuadro de diálogo de guardar abierto, ventana emergente
ayudantes de enhebrado
soporte para elementos de menú
modelos de vista que se pueden cerrar
Generador de código MVVM
Kit de herramientas de luz MVVM
• Autor: Laurent Bugnion
• Soporte de Silverlight: sí
• Documentación: muchos artículos disponibles en el blog de Laurent + otros desarrolladores también
• Hosting: CodePlex
• Licencia: licencia MIT
• Caracteristicas:
Instalador MSI
Proyecto de VS y plantilla de elemento
Fragmentos de código VS
Sistema de mensajería para la comunicación intermodal.
Manejo de eventos como comandos.
Ayudantes de MVVM
• Autor: Mark Smith
• Soporte de Silverlight: no
• Documentación: algunos artículos en el blog de Mark.
• Hosting: sitio web personal.
• Licencia: no definida
• Caracteristicas:
conductas adjuntas
Creación de un modelo de vista usando la extensión de marcado.
validación basada en atributos
IOC / DI utilizando el enfoque ServiceProvider
modelo de vista que se puede cerrar
cursor de espera (usando el nuevo WaitCursor () {// su código aquí})
Fundación MVVM
• Autor: Josh Smith
• Soporte de Silverlight: no
• Documentación: artículos sobre la implementación de Messenger en el blog de Josh o Marlon Grech
• Hosting: CodePlex
• Licencia: MS-PL
• Caracteristicas:
Sistema de mensajería para la comunicación intermodal.
Monitor de eventos PropertyChanged
Caliburn
• Autor: Rob Eisenberg
• Soporte de Silverlight: sí
• Documentación: documentación completa online disponible.
• Alojamiento: CodePlex codeplex.com/caliburn
• Licencia: licencia MIT
• Caracteristicas:
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 asíncrona automática.
presentadores que manejan problemas del ciclo de vida de la IU, como el manejo de la semántica de activación, desactivación y apagado para varios componentes de la IU
Las aplicaciones de Caliburn son completamente verificables
varias utilidades como un administrador de tareas en segundo plano
admite varios patrones de IU (no solo MVVM)
contenedor de inyección de dependencia
Ónix
• Autor: William e Kempf
• Soporte de Silverlight: no
• Documentación: introducción básica disponible en CodePlex
• Hosting: CodePlex
• Licencia: no especificado
• Caracteristicas:
Patrón ServiceLocator
Creación de ViewModel utilizando una extensión de marcado personalizado
Servicios relacionados con la interfaz de usuario, como IDisplayMessage
Calcio
• Autor: Daniel Vaughan
• Soporte de Silverlight: no
• Documentación: 2 artículos muy detallados sobre CodeProject (parte 1 y parte 2)
• Hosting: CodePlex
• Licencia: usar, copiar, modificar y / o distribuir y mantener los derechos de autor!
• Caracteristicas:
Administrador de módulos para habilitar o deshabilitar módulos en tiempo de ejecución
Servicios de mensajería para interactuar con el usuario desde el cliente o servidor usando la misma API
Command Service para asociar los comandos de WPF IC con interfaces de contenido que solo se activan cuando una vista activa o un modelo de vista implementa la interfaz
Adaptadores de región para barras de herramientas y menús
Registro cliente-servidor listo para trabajar fuera de la caja
Incluye módulos, como un navegador web, editor de texto, ventana de salida y muchos más
Interfaz con pestañas con indicación de archivo sucio (reutilizable en todos los módulos)
nRuta
• Autor: Rishi
• Soporte de 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)
• Hosting: CodePlex
• Licencia: MS-PL
• Caracteristicas:
Soporta Blend3 comportamientos y desencadena modelos.
marco localizador de recursos
Servicios de visualización: OpenFileDialog, ShowMessage ...
usa atributos para mapear View y ViewModel juntos
Nito MVVM
• Autor: Shammah
• Soporte de Silverlight: no
• Documentación: no
• Hosting: CodePlex
• Licencia: no especificado
• Caracteristicas:
- varias implementaciones amigables de MVVM de la interfaz ICommand
Oceano
• Autor: Karl Shifflet
• Soporte de Silverlight: no
• Documentación: artículos disponibles en el blog de Karl.
• Hosting: sitio web personal.
• Licencia: no especificado
• Caracteristicas:
escrito en VB.Net
validación basada en atributos
Clases básicas de modelos de vista: comando de relé, modelo de vista closeable ...
Capa de acceso a datos del servidor SQL
Marco MVVM básico
• Autor: Lester Lobo
• Soporte de Silverlight: no
• Documentación: muestra de aplicación disponible con la biblioteca.
• Hosting: CodePlex
• Licencia: MS-PL
• Caracteristicas:
Comandos delegados / Keybinding
mensajería entre máquinas virtuales
Manejando eventos como comandos con comportamientos adjuntos.
Manejo de diálogos (y más) como servicios.
Fragmentos de código VS
Buena luz
• Autor: Peter O''Hanlon • Soporte de Silverlight: sí
• Documentación: muestra de aplicación disponible con la biblioteca.
• Hosting: CodePlex
• Licencia: MS-PL
• Caracteristicas:
Gestión de "área de trabajo" (conjunto de documentos que pueden cerrarse)
soporte para la piel
mensajería entre máquinas virtuales
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.
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 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. Véase también: Link .
WAF es un marco ligero que le ayuda a crear aplicaciones WPF con MVVM. Es solo para WPF y no es compatible con Silverlight. Es un poco más diferente que la mayoría de los otros marcos MVVM con la introducción de los Controllers . 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 comprende el concepto, es bastante sencillo comenzar con una clase de base de VM limpia que implemente INotify, y simplemente continuar desde allí.
Mezcla tu propio!
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.
Yo 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.
Otro a tener en cuenta 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.
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, así que estoy un poco sesgado. Dicho esto, aquí va:
Microsofts MVVM Toolkit - esto todavía está muy 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 profesor 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, así que no puedo comentarlo, 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 soporte Silverlight y Blendability muy fuerte.
Actualizar Laurent me acaba de informar que las versiones .NET 3.5 y .NET 4.0 son compatibles con las características. Wau para ir Laurent.
Cinch - El excelente MVPM de Sacha Barber, único en WPF. 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 Bill Kempf. El objetivo de Onyx es complementar los marcos de MVVM, y agrega funcionalidad que normalmente es difícil de hacer para las personas en MVVM / WPF. Nuevamente, 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.
Prism : una vez más, nunca lo he usado, pero he oído muchas cosas buenas sobre él.
Ocean : Karl Shifflett, Gerente de programa en el equipo Cider, lanzó recientemente un marco MVPM de WPF con todas las funciones. Una vez más, este es un marco excelente y tiene muchas recomendaciones.
La conclusión es, descargue los diferentes marcos, eche un vistazo a ellos y descubra cuál encaja más intuitivamente con su forma de pensar y con sus requisitos. Si piensa que podría querer admitir Silverlight desde la misma base de código, entonces se deben descontar los marcos solo de WPF.
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, 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 Cocktail y DevForce framework de Ideablade
También hay nRoute
Un marco de aplicación realmente agradable para WPF / Silverlight que admite MVVM