robburke.NET
© 2010 Robert Burke
All Rights Reserved.

TechDays 2009I’ve just finished delivering the “Building Modular Applications using Silverlight and WPF” session at Microsoft Canada’s TechDays 2009 event in Toronto.

What a difference a year makes! At last year’s TechDays, my presentation was all: “Silverlight is new and awesome! Let’s lap around some awesome Silverlight features!”

But this year, as Silverlight and WPF have gained some maturity, many of us are now working on more complex projects enabled by these frameworks.

So this year’s theme, appropriately, was designing for change. It was about taming complexity in real-world Silverlight and WPF apps with patterns, conventions, examples, and a little glue code.

What we covered

After a brief primer on the MVVM pattern, the core of the presentation was a lap around Prism, a.k.a. the Composite Application Guidance for Silverlight and WPF released by Microsoft’s Patterns and Practices group.

We looked at the structure provided by Prism’s Shell and Bootstrapper, demystified Dependency Injection (over breakfast), and then explored the Region Manager, Modules, the Event Aggregator, and Commanding.

Taming Complexity and Designing for Change

Prism's Stock Trader Referencec Implementation

Prism's Stock Trader Reference Implementation

Complexity in the software development lifecycle comes in many forms, including but not limited to:

  • integrating multiple disparate sources of data,
  • dealing with changing requirements,
  • managing features delivered by distributed dev teams,
  • creating complex interactive views,
  • rapidly skilling up new resources on a project,
  • cleanly separating concerns for different roles (like designer and developer), and…
  • well, I could go on.

It seems to me like a good way to tame complexities like these is to design for change. Prism helps you do this. So does MVVM.

I’ve worked with WPF since it was called Avalon, but only recently started using Prism.

When I go back now and look at my pre-Prism code, it looks fine in parts, but organizationally, it reeks of uninformed, trainwreck stuff. If I could speak to Rob vPrevious, I would insist that he take the time to learn Prism.

Do your time in Prism

I did my time in Prism

I did my time in Prism, so I did

So my call to action for all serious WPF and Silverlight devs is:

Finally – if you are a Silverlight or WPF developer, and are looking for a place to work on interesting projects on a scale that demands you plan for change, please contact me.

For those of you who came out today, thanks for the engaging conversations afterwards, and I hope you found the presentation a helpful primer on Prism. May it help you get up the learning curve and start using the P&P guidance in your own applications!

Please write me with your own Prism thoughts and stories.

This year, the theme was designing for change. It was about taming complexity with patterns, conventions, examples, and glue code.

it was a deeper Senior Dev / Architect level discussion that discussed the MVVM pattern and Prism, the Composite Application Guidance for Silverlight and WPF.

Some WPF Line-of-Business App follow-up after my presentation at DevTeach today:

Great Snippets: Great code snippets I have installed into my Visual Studio for WPF development are the Dr Wpf and Nerd+Art snippet packs.

WPF Coding Conventions: The coding guidelines I use for WPF are a riff on Paul Stovell’s XAML and WPF Coding Guidelines.

Application Quality Guide: There’s a WPF Application Quality Guide in the works. More information at WindowsClient.net.

Avalon Healthcare Demo: Still my favourite WPF Line-of-Business App Demo. Code available here.

Prism: Think CAB (or SCSF) for WPF, re-built from the ground up to learn from past Composite UI frameworks. There are drops available on Codeplex. Brian Noyes, a contributor, has a great summary here.

WPF/Silverlight shared code: Someone asked about sharing code between WPF and Silverlight. While I think it’s more skills than code that you’ll actually be sharing, here’s a good example in Delay’s blog of actual code being re-used bewteen the two frameworks.

hope that helps,
Rob