miércoles, 9 de abril de 2008

Web Client Software Factory Que es y que no es?

No es un generador de código, no amigos...para nada. Una Software Factory es mucho mas que eso y es necesario mencionarlo para apreciar una gema del software que tendrá un futuro prominente que seguramente alcanzará una madurez sin precedentes.

Si nos metemos en los pensamientos de algunos desarrolladores podaríamos expresar:

"Desarrollar con las WCSF es ordenarse...es programar elegantemente.. es complicar las cosas que suelo hacer con menos código.. es gastar mi tiempo en escribir mas código detallado... donde genero mis controles de usuario.. no es simplemente bonito, ordenado, "desacoplado" o por el otro lado.. necesito escribir mas código al que estoy acostumbrado.."

Para no pasar de noche y apreciar el trabajo y el potencial y madurez que podemos alcanzar desarrollando software con esta conjunto de modelos, patrones, mejores prácticas, automatización del esquema de trabajo, infraestructura "plug & ready", para la seguridad, manejo de errores, registro de bitácora, navegación, inyección de caché, validación de datos, inyección de servicios a nivel de configuración en tiempo de corrida, recetas de cocina para la creación de componentes basados en el modelo Model View Presenter, programación orientada a aspectos, Dependency Inyection, Inversion of Control container y muchos mas.

Solo devengándonos un momento a pensar en el trabajo duro y a la dedicación que debe darse a un equipo desarrollo para que tan siquiera de luces de trabajar bajo estándares, modelos, patrones, mejores prácticas y garantizar que no se pasen de la raya, que tengan un camino y una infraestructura disponible que sea suficientemente bien diseñada para que pueda acoplarse aunque no se desarrolle en el mismo equipo y mantenga una apariencia consistente, y una reutilización de código real y eficiente.. esto a sido exitosamente alcanzado por la WCSF y sigue madurando.

La WCSF para un arquitecto es un sueño plasmado en una infraestructura lista para trabajar y para el desarrollador la forma en que su trabajo complementará y contribuirá con el socio de al lado. Podemos decir que WCSF es : Pro-Testing. Pro-Modularity. Pro-Team Work. Pro-Improve QA.

Veamos algo de historia:

Imagine construir una aplicación que a pesar de su complejidad y tamaño, necesita descomponer se y desarrollarse en varios equipos, que se ensamble en tiempo de corrida, unos encargados en la infraestructura común y a su vez que la apariencia de la interfase de usuario de cada modulo sea congruente y desacopladas entre cada uno de ellos. Que se puedan exponer servicios y se puedan compartir entre los módulos. Este escenario fue inicialmente resuelto por la Composite UI Application Block (CAB) y luego por Smart Client Software Factory. Luego este escenario fue dirigido para Windows Mobile 5: Mobile Client Software Factory. Y para las aplicaciones Web integradas la Web Client Software Factory fue desarrollada. (Extraído del siguiente articulo: http://blogs.msdn.com/francischeung/archive/2008/01/28/composite-wpf-guidance.aspx )

Para comprender como todo esta infraestructura trabaja en conjunto basta con echar un vistazo a los elementos de las componen:

1) En la parte de Application Blocks tenemos:

La Composite Web Application Block , el Object Builder y las famosas Enterprise Library en su version 3.1.

En la CWAB tenemos toda la tubería responsable de la infraestructura de una aplicación Web orientada al modelo MVP (Model View Presenter; incluye la definición de como se inyecta el presenter en la pagina web (Presenter<TView>)) , la definición de los modulos, los servicios de contexto (HttpContext), de sesión (HttpSessionState y StateValue<T>, los servicios que descubre del servidor (HttpServerUtility) y la infraestructura de seguridad definida por roles y reglas. También podemos encontrar la librería para acceder los serivicos a través de la configuración, y la reutilización de proveedores bajo el modelo desacoplado el sitemap y Autorization providers.

No menos importante, tenemos dentro del mismo dll, el amigo Object Builder, encargado de contener e instanciar en memoria todos los servicios que a lo largo y ancho de la WCSF son inyectados. No hay una clara separación entre la CWAB y el contenedor de servicios es mas una mezcla de ambos, de allí el éxito sin precedentes que tendra UNITY el contenedor de IoC que no solo es liviano sino que esta claramente separado y definidas sus tareas y responsabilidades, esto no da una efectiva aplicación de un diseño desacoplado sobre aplicaciones que no lo eran y que gradualmente pueden mutarse a un diseño con una solución excepcional en la búsqueda del desarrollo por componetes, modularidad y testing de nuestras aplicaciones. Puedes saber mas al respecto visita: http://msdn2.microsoft.com/en-us/library/aa137950.aspx .

Las Enterprise Library 3.1 (May 2007) Estas proveen de un alto contenido de servicios de infraestructura paras las WCSF´s que el desarrollador puede disponer inmediatamente de los mismos. Entre estos servicios tenemos: Caché, Encripción, mejores practicas de acceso a datos y manejo de excepciones, bitácora (logging), seguridad que se funciona con la solución de la CWA, validación y la inyección de cada uno de estos servicios como políticas que pueden ser implementadas de una forma excepcional, como si fuera poco todo esto configurable a través del archivo de configuración de la aplicación web y el manejo de atributos dentro de las clases de .net. Si amigo hay mucho porque sacarle raja a las WCSF!. (Mas información en: http://msdn2.microsoft.com/en-us/library/aa138002.aspx )

2) La automatización de las recetas o Guidance Automation:

Si ud. se ha preguntado para que tiene que instalar las GAX (Guidance Automation Extensions) y la GAT (Guidance Automation Tool Kit) he aquí la respuesta.

la GAX esta dirigida al desarrollador para automatizar tareas como al momento de crear una pagina bajo el modelo MVP, es necesario invocar las librerías de la CWA y de las Enterprise library y crear los archivos con código en diferentes módulos esto le permite al desarrollador ahorrar tiempo y le al arquitecto la tranquilidad que hay una receta que respeta este modelo de arquitectura MVP, entre uno de los muchos modelos y patrones que tiene embebida la WCSF. Para el arquitecto esta dirigida la GAT ya que le permitirá crear "Templates" para automatizar ciertas tareas bajo la arquitectura definida en la WCSF. Es decir no es un generador de código, sino dentro de las capacidades y limitaciones de los templates de VSTO facilita algunas tareas que pueden ser susceptibles al error de escritura o a romper el modelo y patrones de la WCSF, esto permitirá de alguna forma garantizar que la solución creada será altamente desacoplada, bajo estándares y mejores practicas orientada al Testing para garantizar la calidad del producto que se desarrolla en especial para equipos de trabajo que lidian con el problema de acoplar las partes y dar una apariencia de composición integrada.

3) Por ulitmo cabe mencionar que las WCSF aplica los siguientes patrones de diseño de la industria de software mundialmente reconocidos:

Application Controller: Crea un objeto separado para controlar y centralizar el flujo de la pagina y la lógica de la navegación de la vista.

Dependency Injection (Mi Favorito) Expresión declarativa de las dependencias en la definición de una clase, que utiliza un objeto constructor para obtener instancias de los objetos dependientes durante su creación o inicialización.

Inversion of Control (El éxtasis) Delega la función de seleccionar una implementación concreta de un tipo para las clases dependientes de un componente externo o fuente. Nos hace el trabajo de contener los servicios requeridos para inyectarlos cuando se requieren. Ejemplo de esta Implementación es UNITY (Mua!).

Model View Presenter (Hecho para desarrollar componentes que pueden ser probados) Separa las responsabilidades para el despliegue visual y el comportamiento del manejo de los eventos dentro de diferentes clases (View & Presenter) . La Vista maneja los controles de la pagina y dispara los eventos al presentador. Este contiene la lógica para responder los eventos, actualizar el modelo (la lógica de negocio y la info. de la aplicación) y guardar el estado de la vista.

Module Interface Separation Para crear soluciones para equipos de trabajo ser requiere sea separada modularmente una solución que garantice su futuro acoplamiento. Este patrón tiene como objetivo cubrir esta necesidad. El modulo es partido en dos ensamblados el de interfaces y el de la implementación del modulo. El primero contiene interfaces de los servicios y las entidades de negocio, el segundo solo información referente al modulo en sí.

Responsivness Patterns Básicamente son patrones de ajax que estan enfocados a crear Interfaces de usuario de responden rápido a la entrada del usuario. Entre estos están: Display Morphing, Live Form, Live Search, Progress Indicator, User Action, etc. Mas información en: http://msdn2.microsoft.com/en-us/library/cc304779.aspx .

Service Locator Contiene la referencia de los servicios y encapsulan la lógica de los mismos. Este obtiene la instancia de los servicios disponibles.

Bueno espero haber despertado el interes, aclarado algunas dudas y motivado a si quiere desarrollar una aplicación orientada a las pruebas para garantizar la calidad, y tiene las complicaciones del los equipos de trabajo y quiere utilizar toda la experiencia, tecnicas y servicios que le provee la WCSF esta es una solución adecuada y que su facil o bajo mantenimiento le pagará devuelta la inversión que haga incialmente para incorporar esta solución.

En el futuro estaremos escribiendo uno a uno los servicios de la WCSF para aprovechar todo el potencial esta solución y para motivarlo amigo bloguero a que mejore su calidad de código y aprecie el esfuerzo de los amigos de P&P que han entregado en sus manos para que ud. y yo mejores. Pronto estaré hablando de UNITY que es una solución tan práctica y poderosa tanto que nuestro amigo Michael Puleio, esta creando una nueva version WCSF con Unity (http://blogs.msdn.com/mpuleio/archive/2008/04/04/converting-the-composite-web-application-block-to-unity-intro.aspx).

Hasta la vista, Code4Fun!,

Manolo Herrera

1 comentario:

Fantômas dijo...

Buen blog che! Te invito a darte una vuelta por mi blog.

therooter.blogspot.com

Un abrazo.