VAN - Diciembre 12 de 2009 - Aplicaciones modulares con PRISM
Formato
Reunión virtual
Duración:
Vídeo: 2:08 horas
Ponente:
Julián Domínguez
Ezequiel Jadib
Síntesis:
PRISM: Aplicaciones modulares en WPF y Silverlight
Ante estas características:
- Aplicaciones Cliente
- Complejas
- Muchas partes en movimiento
- Experiencia de usuario
- Múltiples desarrolladores / equipos de desarrollo / distribución geográfica
El desafío es:
- Cómo hacer una aplicación
- Dinámica
- Adaptable
- Extensible
- Testeable (funcional y unitario)
Como encarar la complejidad:
- Particionar el problema
- Manejar las dependencias entre las piezas
- Re-ensamblar la aplicación (para que sea cohesiva)
Prism nos ayuda a lograr a manejar estas piezas y las comunicación entre las mismas
Prism es el sucesor de CAB (Composite Application Block) y SCSF (Smart Client Software Factory) aunque fue completamente rediseñado para
WPF / Silverlight y se tomaron las lecciones aprendidas de CAB (desventajas señaladas por la comunidad: muy intrusivo)
Prism - Composite Client Application Guidance for WPF and Silverlight
Está compuesto por:
- Librerías reusables (CAL)
- Implementación de Referencia (RI)
- Documentación
- Quick-Starts y How-To's (guías específicas sobre un tema en particular)
- Tiene una comunidad en CodePlex
- Tooling para Multi-targeting (WPF y Silverlight)
Conceptos:
- Bootstrapper
- DI / IoC Container
- Módulos
- UI Composition
- Patrones de Presentación
- Eventos / Comandos
- Multi-Targeting
Modularidad:
Un módulo en PRISM es una colección de componentes relacionados: funcionalidad, vistas, servicios, controllers
Cada módulo tiene un punto de entrada (método Initialize)
Cada módulo es una unidad de desarrollo, permite desarrollo independiente, se puede reemplazar un módulo por otro y no afecta al resto
Cada módulo es una unidad de despligue
Carga y Descubrimiento de Módulos: estática, por configuración, por descubrimiento, on demand. Resolución de dependencias.
Dependency Injection:
- Es la cola que permite compartir funcionalidad entre módulos
- IoC
- Delega la responsabilidad de construcción de objetos a un Container
- Facilita el desarrollo con TDD (inyección de mocks o stubs en el constructor)
- Unity es el container por defualt, pero soporta cualquier container (hay adapters p/ la mayoría)
UI Composition:
- Permite definir areas o zonas lógicas (Region) (por ejemplo toolbar, main, sidebar)
- Dos tipos:
- View Injection
- View discovery
Comunicación:
- Comandos y Eventos
En WPF y Silverlight ya contamos con esto:
- Routed Events
- Esquemas de ruteo
- Bubbling
- Tunneling
- Direct
- Los routed events son parte de WPF y parcialmente en Silverlight
- Están atados al árbol visual
- Solo los elementos del árbol visual pueden atrapar los eventos
- Routed Commands
- Usa por debajo Routed Events
- No soportados en Silverlight
- Atado al elemento visual con foco
- Un solo receptor del comando
Para superar esto PRISM tiene:
- Event Aggregator
- Permite comunicación entre componentes no visuales desacoplados
- Lugar central donde publicar y subscribir a eventos de la aplicación
- Implementa el patrón Publish/Subscribe
- Fuertemente tipados
- Manejo de memoria (lifetime) (los módulos o componentes pueden tener distintos tiempos de vida, PRISM me permite
prescindir de referencias estáticas a los suscriptores)
- Simplifica manejo de threads
- Filtros en el receptor
- Comanddos
- DelegateCommand
- Simple implementación del patrón Command
- Sin ruteo basado en árbol visual
- Composite Commands
- Permite agrupar comandos, para invocar varios receptores con una misma llamada
- Agrega soporte para Silverlight (no soportados nativamente)
- Permiten interactuar con el Presenter (View Model) en vez del code behind
Patrones de Presentación:
- Facilitan la testabilidad
- Vistas ultra delgadas
- Facilitan el trabajo con el diseñador
- No se fuerza ninguna implementación (se puede usar con MVVM o en el code behind)
- Patrones
- Model View ViewModel (MVVM) (o Presentation Model) (recomendado para WPF/Silverlight)
- Model View Presenter (MVP)
Bootstrapper
- Nos permite configurar al container
- Es el punto de entrada donde se empieza a hacer la carga y descubrimiento de módulos
- Unity por defecto pero se pueden usar otros
Multi-Targeting
- WPF y Silverilght
- No hay compatibilidad binaria (por lo menos hasta la versión 3)
- Se logra mediante compartir el código fuente (conviene usar addin linked projects)
Caso de Éxito: Rough Cut Editor
- Aplicación hecha con Prism 2.0
- La aplicacion utiliza todas las características de PRISM
- Se hace una comparación con la primera versión del producto que no utilizó Prism
- Fue realizada por equipos de desarrollo distribuidos entre Argentina, Estados Unidos e India
- UI Composition y modularidad (más de 12 módulos)
- Realizada con TDD (más de 1200 tests)
Enlaces:
Lecturas
Video
Si lo prefieren, pueden observar el vídeo en http://www.screencast.com/t/TYKxklai0 o descargar el archivo desde este enlace, el cual tiene un tamaño de 276.79 MB.