Home > CAB > Composite UI Application Block – Conceptos

Composite UI Application Block – Conceptos


Voy a comenzar una serie de tutoriales básicos sobres el desarrollo de smart client applications utilizando el CAB (Compisite UI Application Block) del equipo de Patterns&Practices de Microsoft. Como todo tutorial, este pretende solo brindar un entendimiento general de las potencialidades del CAB y algunos elementos prácticos iniciales para facilitar la introducción a este Application Block (en adelante AB) que muchos consideran dificultoso de entender y que es uno de los AB centrales del Smart Client Software Factory (SCSF).  

 
Objetivo del CAB

El CAB, como su nombre lo indica, es un application block diseñado para ayudar en la tarea de desarrollo de aplicaciones Windows Form-based. Esto gracias a que provee una serie de patrones comunmente encontrados en aplicaciones windows front-end. Uno de los mas importantes objetivos es permitir el desarrollo de módulos totalmente independientes pero a la vez colaborativos.

Lo que el CAB NO es

Es importante aclarar que el CAB no es:

  • Una libreria de controles 
  • Una herramienta para diseñar formularios 
  • Un producto propiedad de microsoft

 

Pros y Contras

Las ventajas de su uso se obtienen si se trabaja en equipo donde distintas personas desarrollan módulos independientes de una aplicación smart client form-based en donde la complejidad de la interface de usuario es elevada. Es indispensale contar con un conocimiento profundo del AB antes de embarcarse en un proyecto con este pues los subsistemas de inyección de dependencias y eventbroker, sumados a los cambios en el paradigma de desarrollo de aplicaciones windows que introduce el CAB pueden hacer fracasar el proyecto o colaborar en la definición de una arquitectura erronea.

El CAB introduce cierta complejidad a los proyectos por cuanto es rico en conceptos nuevos que deben dominarse y en partes componentes de los módulos. Además las aplicaciones desarrolladas con este son un poco mas difíciles de depurar.

Comenzamos

Primero voy a definir algunos términos que verán en forma recurrente en este y en cualquier artículos sobre el tema. Estas definiciones serán muy sencillas con el objetivo de brindar un entendimiento rápido de aquellos que definen los componentes de la arquitectura proporcionada por el CAB. Con esta sencillez se pierde un poco de realismo pero iré profundizando los conceptos a medida que avance y requiera mayor precisión.  Mostraré primero aquellos términos que son facilmente identificables por ser visibles o estar directamente relacionados a la composición de los formularios windows.

  • Smartpart: Sencillamente se trata de un UserControl. Por ejemplo un Smartpart de datos de clientes o formulario de pedido. 
  • View: es otro nombre utilizado en forma intercambiable por Smartpart. Este cobra mayor sentido cuando se encuentra en el contexto de la implementación del patrón Model-View-Controller. 
  • Workspace: Es un Control contenedor muy similar a un Panel que se utiliza para armar el layout de los forms de la aplicación. Estos workspaces (contenedores) contendrán los Smartparts que se visualizarán.
  • UIElements: son, y perdonen la obviedad, elementos de la interface de usuario comunes a toda una aplicación. Por ejemplo los menues, barra de estados y barra de herramientas. Estos elementos deben compartirse entre lós módulos de la aplicación.
  • SmartPartPlaceholders: es solo un control que actua como contenedor de un SmartPart.
  • Layouts: son UserControls que mediante Workspaces y/o SmartPartPlaceholders determinan la distribución de los SmartParts en el formulario.
  • Shell: la diferencia entre Shell y Modules la explico mas adelante.

 

 

 

  • Modules: son assembies que contienen los necesario (Workitems, Smartparts, Controllers, States, Services, etc) para implementar una funcionalidad específica. Por ejemplo, módulo de clientes, módulo de facturación, módulo de stock, etc.
  • Workitem: entendamoslo como una "pieza de trabajo". Es "SOLO un contenedor" que aloja todos los componentes necesarios para cumplir con una pieza de trabajo. Es decir, contiene los Smartparts, Controllers, States, Services, Commands, Items, Workspaces  y otros Workitems. Es como una gran bolsa donde guardamos todo lo necesario para realizar una tarea. Por lo general es util pensar en la pieza de trabajo como un Use Case, así por ejemplo podemos pensar el un workitem AltaPacienteWorkItem, RechazoPolizaWorkItem o ConsultaCreditoWorkItem aunque no tiene por qué corresponder si o si a un caso de uso.
  • Controllers: son simplemente los controladores en el caso de una implementación del patrón Model-View-Controller.
  • States: cada workitem contiene una colección no tipada de objetos (es decir, una colección que puede tener objetos de cualquier tipo) para guardar aquellos objetos necesarios para realizar la tarea. Por ejemplo, si el workitem es PagoServicioWorkItem (un workitem creado por nosotros para realizar el pago de un servicio cualquiera como agua, luz, gas, iternet, etc), la colección States de este workitem contendrá las instancias de los objetos que intervienen en el pago de un servicios como son, el usuario del servicios, el prestador, el recibo, el contrato, y algunos otros mas.

Hemos dividido estas definiciones en dos grupos, los que tienen relación diracta con la composición de los formularios y los que no. Esto es porque el CAB se compone de tres assemblies:

  • Microsoft.Practices.CompositeUI.WinForms.dll – el primer grupo
  • Microsoft.Practices.CompositeUI.dll – el segundo grupo
  • Microsoft.Practices.ObjectBuilder.dll -recomiendo que lean el último post relacionado Dependency Injection with ObjectBuilder
 
Shell y Modules

Supongo que el concepto de módulo es lo bastante intuitivo y/o familiar como para definirlo. Solo diré que una aplicación se puede dividir en móulos. Por ejemplo un CRM puede dividirse en Contactos, Productos, Leads, Oportunidades, Actividades, Casos, etc.

Ahora, el Shell es la aplicación marco que contiene los elementos de interface de usuario común a todos los módulos y que es la encargada de cargar los módulos. Por esto, toda solución en la que se utilice el CAB contendrá al menos dos proyectos, uno ejecutable (el Shell .exe) y al menos un módulo class library (el/los módulo/s .dll).

 

La idea detrás de esto es no solo la separación e independencia de los módulos entre si, sino también la posibilidad de que distintos equipos desarrollen módulos en forma paralela.

Un excelente documento para  profundizar estos conceptos es: http://msdn.microsoft.com/library/default.asp?url=…

About these ads
Categories: CAB
  1. Pedro
    January 4, 2007 at 12:00 pm

    Lucas, saludos desde venezuela y Feliz Año 2007, me parece interesante tu articulo estoy estudiando el CAB, debido a que tengo que entregar un proyecto en este mes de enero 2007, realmente es migrar una aplicacion de VB6 a VS2005… bueno lo cierto es que me dejaste incompleto en el curso… no se consiguie material en español del CAB, por favor si tienes o consigues un link por favor enviamelo… Bueno saludo y que te animes a continuar el curso de CAB.pedro obando…

  2. Lucas
    January 4, 2007 at 1:56 pm

    Pedro, continuaré el curso en poco tiempo. Por ahora dejame que te dé algunos tips con los que todo mi equipo sufrió un poco al utilizar el CAB. En primer lugar debes entender lo mejor posible este AB antes de hacer nada. En este artículo intenté reflejar algo que no vas a leer en ningún otro lado y que son los contras del CAB y que características debe tener tu proyecto para justificar su utilización.
     
    Para aprender un poco mas luego de esta introducción y de realizar al menos los primeros 6 hands on lab, si bien no existe nada en español, hay buenos ejemplos como el cabana project y los proyectos de Omar Al Zabir (proyecto muy bueno en codeproject) que te puede enseñar mucho.
     
    En primer lugar yo empezaría entendiendo como funciona la inyección de dependencias porque esto está presente todo el tiempo en los proyectos con el CAB y es un concepto muy importante. Puedes verlo en articulos de codeproject como este. También, si quieres algo mucho mas detallado te recomiendo el artículo Sayed Y. Hashimi  y por supuesto mi artículo sobre el tema Dependency Injection with ObjectBuilder que es muy facil de entender como para saltar a algo mas detallado.
     
    Bueno Pedro, te mando un saludo y espero que te haya sido útil.
    PD: cualquier cosa puedes mandarme un email.

  3. Pedro
    January 9, 2007 at 9:02 pm

    Hey Lucas saludos de nuevo, realmente siguiendo tus
    consejos, ayer termine todos los laboratorios… en algunos momentos me tranque
    y el programa me daba error, entonces recurría al final del laboratorio y
    ejecutaba el programa. En el primer laboratorio (CAB) estoy fino ya domino los conceptos y logre
    realizar mi primera aplicación, con respecto al segundo al los
    "WorkItems" los realizo pero me doy cuenta que tengo que seguir
    siempre ciertos patrones, es realmente fácil como lo explican "Block Hands
    On Labs", pon aquí, coloca allá, copia este código en este sector, todo es
    bien bonito y faciliiiiitoooooo… Decidí hacer algo y cuando comencé no supe
    por donde y dije tengo que continuar los laboratorios, después de un tiempo los
    termine, entonces me anime a realizar mi programa, y quede en las mismas.  Seguro te estas riendo (dirás que persona tan
    bruta), no realmente me gusta la idea creo que es una vía para mis soluciones
    (Aplicaciones o programas) realmente una de las cosas que yo deseo es no
    visitar a los clientes al menos que se amerite mi presencia y yo (el perucho) se
    que CAB me provee esa solución, por medio de Asembles y ClickOne.
    En conclusión los Application Block Hands On Labs, (CAB) proveen una ayuda,
    pero existe mucho código que no lo explican yo asumo que ese código se
    pone igual en los programa, o mejor tomo un ejemplo de laboratorio (Lab 7 -
    acorde a mis necesidades) y lo modifico (por supuesto le saco una copia y
    trabajo sobre la copia como una especie de plantilla) voy agregando nuevo módulos
    y WorkItems a estos módulos, estos WorkItems los que tengan datos los
    enlazo con la regla de negocios y capa de datos, cambio la forma o el layout
    del FormaShell (Shell – Module), creo o modifico módulos los cuales van a ser
    consumidos por otros módulos, etc… eso por una parte,  o Existe un generador para generar código
    smartclient o CAB, o plantillas para CAB que tengan módulos ya listos, no se…
    (Realmente no creo que se ha gratis o free) o dime como tu o tu grupo trabaja
    con el CAB.

    Realmente comenzar desde cero Lucas, es como un poquito desalentador…
    O quizás creo que voy muy rápido y soy muy goloso comiendo información…Bueno Lucas, dame tu consejo maestro… ya tu tienes
    experiencia en la utilización de los CAB.http://codigonet/blogspot.com

  4. Lucas
    January 11, 2007 at 3:26 pm

    Buenas Pedro. A ver, si terminaste los Hands On Labs eso quiere decir que ya tienes un conocimiento general del CAB, sus objetivos, conceptos, clases, etc.-
    Ahora seguramente sientes cierta inseguridad respecto de que estás haciendo cuando haces algo, para que sirven algunos atributos como InjectionConstructor u otros, cual es la secuencia de carga de los módulos entre otras cosas. El tema es que para entender mas hay que ver el código del CAB que al principio es un poco dificultoso, hay que seguir con F11 para entender como funcionan algunas cosas.
     
    Yo sigo insistiendo en que el tema de la inyección de dependencias es uno de los temas mas importantes a entender.
     
    A partir de acá se hace mas dicifil encontrar material didáctico sobre el tema. Si me preguntas yo diría que sigas te fijes como se cargan los módulos, que estudies y entiendas bien a los workitems (es una de las cosas mas importantes), sus jerarquias, y que estudies la manera y facilidades que ofrece el CAB para la implementación del patrón Model-View-Controler.  
     
    En cuanto a que no sepas como empezar un proyecto no significa nada en especial, no creo que nadie pueda hacerlo inmediatamente despues de hacer los Hands On Labs (sobre todo si uno los hace en forma rápida – Yo tuve que hacerlos 2 veces, una bien rápida y otra prestando atención porque no habia entendido). Lo que si, significa que te falta un poco, solo eso.
     
    Que si existe un generador de código o plantilla para agregar módulos? En realidad esto está en el Smart Client Software Factory (SCSF) pero nosotros no lo usamos porque el proyecto en el que trabajamos es un poco mas viejo que este. Te recomiendo que primero te interiorices bien sobre el CAB antes de entrarle al SCSF (que seguramente te interesará y ayudará en tus proyectos) porque el SCSF basicamente es CAB + EntLib + Infraestructura + (una especie de asistentes integrados al VS).
     
    Uyyy, voy leyendo y voy contestando. La verdad, yo lo hago de cero porque otros miembros del equipo copian los proyectos enteros en la solución y luego los limpian un poco pero esto resulta desastrozo. De todos modos, una vez que tengas un poquito mas claro (no mucho) el CAB ya te conviene empezar con el SCSF y te aseguro que te va a gustar.
     
    Bueno Pedro nuevamente un agrado recibir tus comentarios. 

  5. Ludwing Gualberto
    August 31, 2007 at 2:16 pm

     Hola Lucas sabes estoy empezando a hacer aplicaciones en SCSF pero me falta practica por fabor si me puedes facilitar los Hands On Labs te lo agradeceria mucho gracias adios

  6. Lucas
    September 1, 2007 at 12:09 pm

    Hola, mirá, los Hands On Lab son del CAB. SCSF no tiene Hands On Lab o al menos  nunca los he visto. Los del CAB lo podes bajar de la página del downloads de Microsoft http://www.microsoft.com/downloads/details.aspx?familyid=ab44f082-3abe-4583-8844-7252ff7c9638&displaylang=en. También podes bajarte el "Designing Applications using CAB & the Smart Client Software Factory" que está en http://www.microsoft.com/downloads/details.aspx?familyid=5F9A8435-1651-4BE2-956D-0446A89A7358&displaylang=en.
    Estos y otros recursos los encontras en http://msdn2.microsoft.com/en-us/library/aa480482.aspx
    Por último, hay otros muy buenos que estan en los comentarios que compartimos con Pedro Obando y que estan debajo de este comentarios.
    Espero que te sirvan. Un abrazo y dejame tu nombre por favor! 

  7. 0x7c00
    March 7, 2013 at 12:35 pm

    It depends on your requirements. If what you want is a personal blog then, I think wordpress is oaky.

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: