The Composite UI Application Block

Further to my recent post on the composite smart client pattern, I am happy to announce that Microsoft Patterns and Practices are producing an application block to directly support this model!

This block follows from work I did last year on rationalizing and identifying the patterns and techniques that we have seen in many smart client solutions, such as those with Dell, Thomson Financial, the Commonwealth Bank of Australia, etc. So, late last year I proposed to Patterns and Practices that an application block that supports this model would be hugely valuable (and immensely cool to write too!).

I developed an initial prototype of the block to try and identify the key areas that we would need to focus on, and to show the folks here at Microsoft just what I had been prattling on about for the last 6 months! This was well received so after a couple of months of scoping and more prototyping the Patterns and Practices guys set to and started on the development of the block proper – the Composite UI Application Block (or CAB for short). They have just released the first community drop on GotDotNet. Register with the CAB Workspace to download it and get involved in its evolution!

The plan is to release an initial version based on Whidbey Beta 2 in the summer, with a final version to be released when Whidbey is released later this year.

So what’s it all about?

The composite pattern is a popular and recurring theme because it essentially provides a flexible and scalable architecture that provides a number of key benefits:

  • It allows a higher degree of separation between application infrastructure and business logic

  • It allows more independent development of the individual business logic components themselves.

  • It provides solution agility because business logic components can be flexibly combined to yield specific solution very quickly.

  • It promotes code re-use because it allows business logic components and the application infrastructure to be re-used across multiple solutions.

  • It provides an excellent architecture for the front-end integration of LOB or service oriented systems into a task-oriented user experience.

The essence of the CAB is to provide an infrastructure so that smart client solutions can be composed from a number of semi discrete parts (SmartParts) that are hosted within a shell environment. The shell provides a number of (pluggable) services, including deployment, security, user interface and workflow services, etc. A specific solution is composed by combining parts with a specific shell (the shell is also pluggable) and then configuring them. The approach is very similar to that of SharePoint, but of course smart clients have much more flexibility because they aren’t subject to the limitations of the thin client model. For example, the composite smart client model is flexible enough to cater for a wide variety of strategies for data handling, offline usage, user workflow, service interaction and user interaction models.

Two of the principle Patterns and Practices guys behind the CAB are the excellent Ed Jezierski and Eugenio Pace. As Ed says on his blog, there are a large numbers of patterns that can support this model – MVC, Application Controller, BlackBoard, Memento, Service Locator for example. The CAB therefore provides support for implementing these patterns. Check out Ed and Eugenio’s blogs here and here for the blow by blow details on how the CAB is evolving.

The CAB code is different from my initial prototype (i.e. much better) and so I have to spend some time getting back up to speed with the current implementation. I’ll post my experiences over the next couple of weeks as I play with it.