c# .net unity-container prism mvvm-light

c# - ¿MVVM Light+Unity or Prism?



.net unity-container (1)

Si necesitas modularidad, querrás mirar Prism. Prism tiene algunos elementos que pueden ayudarlo con MVVM (DelegateCommand y CompositeCommand, por ejemplo), pero creo que es más completo con otro marco MVVM.

Hace unos días hubo una pregunta sobre cómo modelar Prism. Compruébelo para obtener una explicación detallada de cómo considerar la funcionalidad de Prism. Consejos de modelado de alto nivel para Prism MVVM

Unity es una implementación de una inversión de contenedor de control y es definitivamente bueno, pero Prism tiene la capacidad de usar otros contenedores. Tiene soporte integrado para MEF (que, a su vez, está integrado en .NET 4.0), pero no es su única opción. Mire algunas de las muestras incluidas en Prism y decida qué enfoque le gusta más. Unity no está completo por sí solo para la composición de UI en mi opinión. MEF podría ser una opción más cercana si quisiera intentar componer una UI con el enfoque de MVVM Framework + IoC Framework.

MVVM Light es en realidad un marco complementario para Prism. Otros marcos MVVM a considerar:

  • MVVM Foundation (muy ligero ... bueno para proyectos pequeños)
  • Caliburn (marco muy robusto)
  • Caliburn Micro (comparte un nombre y un autor de Caliburn, pero es similar a MVVM Light con algunas convenciones agradables)
  • ReactiveUI (Anteriormente "ReactiveXAML". Esto es un poco de fusión cerebral, pero si aprendes las Extensiones reactivas para .NET (Rx), este marco es simplemente increíble ... mágico en mi opinión).

Si fuera a comenzar un nuevo proyecto: iría con Prism y ReactiveUI.

Prisma porque tiene que tener modularidad con grandes proyectos y me gusta la capacidad de eliminar y agregar grandes unidades de funcionalidad a una aplicación simplemente eliminando o agregando DLL (y no tiene que implementar la función de rastreo de DLL como lo haría con solo un enfoque de IoC + MVVM). Más fácil de probar, más fácil de depurar, más fácil de desarrollar por separado. Niza todo alrededor.

ReactiveUI porque con la programación de la interfaz de usuario en estos días, la mayor parte del tiempo lo dedicas a administrar tu tiempo en el subproceso de la interfaz de usuario. El bloqueo es un no-no ... los usuarios no quieren que se congele la interfaz de usuario; quieren ver que el símbolo de espera GIF animado gire para que sepan que pueden trabajar en otra cosa mientras se cargan sus datos. Además, gran parte del valor que proporcionan las aplicaciones en estos días es tomar datos de sistemas dispares y juntarlos en la interfaz de usuario ... no solo necesitará un buen sistema de composición (Prism), sino que también necesitará un buen marco MVVM que trata las operaciones asíncronas como su pan y mantequilla ... ReactiveUI es eso.

Estoy un poco desactualizado en WPF en este momento y me gustaría escuchar las opiniones de la gente sobre la última versión de Prism (que utilicé hace un par de versiones) contra un enfoque de MVVM Light + Unity (que nunca he hecho - Ejemplos de URL decentes serían buenos).

Mi proyecto será grande y comprenderá múltiples módulos escritos por varios desarrolladores. También hay fondos para incorporar un conjunto de control de terceros para configurar un espacio de trabajo agradable usando uno de los gestores de diseño de Docking / Workspace (y sé que algunos juegan mejor con las regiones Prism que otros).

Si estuviera comenzando un proyecto desde cero en este momento, ¿con qué iría y por qué? Los detalles sobre patrones de arquitectura recomendados específicos serían útiles (por ejemplo, descubrimiento automático de módulos dlls, ¿Inyectar el servicio de registro?). Básicamente, cualquier pensamiento y consejo sería bueno. Me gustaría comenzar una buena discusión. ¿Quizás hay otra dirección por completo en la que sugerirías ir? Estoy muy en la fase de investigación y me gustaría tener la mayor cantidad de información posible.

Puse esto aquí porque pensé que obtendría puntos de vista menos sesgados que los foros Prism / MVVM Light pero, si hay un lugar más adecuado para esta pregunta, indíqueme en esa dirección.