I spent last two days trying to learn the Composite UI Application Block (CAB) recently published by Microsoft's patterns&practices group. This application block provides practices and components to build complex smart client user interfaces.
I've been working on similar frameworks in the past but I always wasn't quite happy of my design. The problem such frameworks are trying to solve is to allow to build the application from independent modules. The module here can consist of views (i.e. forms and other controls), business objects and logic, and something to glue all this together. The final application is “composed” by registering currently available modules. The focus here is to minimize the dependencies between modules and allow rapid development with a team of programmers.
The most prevalent problem I had was to allow the parts to communicate with one another and yet don't introduce too much dependencies. The solution I settled on recently is to implement an automation model that is accessible for all parts and publishes events the parts can subscribe to. You can learn this from great articles from Omar Al Zabir. But still I have problems with connecting this model with the business objects and logic.
So my interest in CAB is to see how they intend to solve such issues and maybe implement similar mechanisms in my framework. The design of CAB is based on few really sophisticated patterns like inversion of control, event broker, commands and of course composite items. Altogether this builds a flexible framework that promises great extensibility. But it also makes it all really hard to comprehend (or maybe it's just for me). The quick-starts aren't much help here because they focus on narrow concepts. What I would really like to see is how all this elements work together in a complete n-tier application like TaskVision, IssueVision or FotoVision.
Through lack of any I decided to create one myself. I thought it would be interesting to re-implement some existing application, and was looking for something that already had well designed data access and business logic layers with good separation of presentation layer. In the end I choose the .NET PetShop, one of Microsoft's benchmark applications,which makes it more interesting as originally this is a web application.
I will write along as I work my way through.