jueves, abril 27, 2006

CAB - Composite Application Block

Como explicar CAB?

La verdad es que es un tema difícil, mejor les voy a decir para que sirve y en algún otro momento posteare algo respecto al funcionamiento interno de este y el object builder.

De manera resumida, CAB sirve para poder crear vistas y workitems. Que son vistas? bueno pueden ser Formas o UserControls y que son WorkItems, viene siendo un caso de uso, como agregar cliente o generar pedido.

¿Que hacemos con estas vistas y WorkItems?
Simple, metemos presenters y/o controllers (dependiendo del patron que queramos usar) para interactuar con ellas. El workitem puede tener muchos presenters, quienes a su vez tienen una vista que muestran.

Otra ventaja de tener los WorkItems es que podemos ir agregando servicios a estos, de tal forma que podamo usar estos objetos (servicios) desde otros objetos contenidos en el workitem como presenters, vistas, otros servicios o ítems.

Una de las ventajas principales y probablemente CAB no estaría completo sin una forma sencilla de implementar patrones como Publisher/Subscriber y Commad, para desacoplar los eventos de sus EventHandlers. Si suena complicado? bueno está parte creo que es la más sencilla, simplemente se usan atributos y uris para ligar un evento con otro.

Espero haberlos confundido un poco más de lo que ya estaban. La verdad es que CAB es bastante confuso al principio.

Para hacerlos aún más bolas, les dejo un pequeño glosario que hice cuando estaba enredado entre tanto termino nuevo.

Glosario
WorkItem: Use Case. Tiene uno o más workspaces. Es un contenedor de componentes como controles, smartparts, services and child workitems.

SmartParts: Views

Services: Model (Data o Servicios). Los servicios se pueden agregar desde configuración (aún no disponible en mobile), programáticamente con un Add(); o declarativamente con el uso de atributos, se puede usar LazyLoading: [Service(typeof(IMyService), AddOnDemand=true)]

UIExtensionSite: sirve para registrar menús comunes.

RootWorkItem.UIExtensionSites.RegisterSite("MainMenu", Shell.MainMenuStrip);

Commands: Eventos.

Event Broker: se encarga de ligar un Event Subscription con el EventPublication correspondiente de acuerdo al URI indicado en el atributo.

Workspaces: lugares a los cuales puedo agregar SmartParts, por ejemplo un
SmartPartPlaceHolder, TabbedWorkSpace, ZoneWorkspace o DeckWorkspace.

Shell: el shell es el punto de entrada de la aplicación. Simplemente se hereda de FormShellApplication y en el Main se manda llamar el metodo Run de una instancia de tu clase que herede de FormShellApplication.

Module: es una forma de encapsular ciertas partes de una aplicación (diferentes WorkItems), por ejemplo OrdersModule. Estos se pueden cargar en tiempo de ejecución dependiendo de los parámetros de configuración. Para esto se usa un archivo "ProfileCatalog.xml" donde se indica que dlls cargar.



Por cierto, espero publicar dentro de poco un glosario de Software Factories, porque muy seguramente muchos posts de aquí en adelante hablaran de viewpoints, esquemas, líneas de producto, familias, assets, dsl, etc.