Aplicaciones Modulares con PRISM

RSS
Modificado el 2011/05/19 02:57 por Pedro Wood Categorizado como VAN

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.

 

Unable to display content. Adobe Flash is required.