Building WPF and Silverlight applications can be challenging, especially for those new to
the technology. Building clean, maintainable, extensible, testable, loosely coupled ones—
with no idea where to start—is close to impossible. In late 2007, I was privileged to get a
call from Glenn Block at Microsoft asking if I was interested in working with the Microsoft
patterns & practices team on a project that would become the first release of Prism,
which was released as the Composite Application Guidance for WPF in June 2008.
I had been working with WPF on complex customer applications, trying to figure out
the best practices and patterns on my own. This was a fantastic opportunity to provide
some guidance and feedback to the team on what mattered, what worked, and what
didn’t, in real customer apps that I had worked on. I had worked with various patterns &
practices teams before as an external advisor, but this was my first opportunity to come
in as a consultant and participate as an integral part of the team.
It turned out to be a wonderful experience for me. The team included some of the
most intelligent, creative, and fun individuals I have had a chance to work with in this industry.
The maturity of the team’s development process, the effort that they put into
collecting community input and keeping the community involved throughout the development
process, and their collective design and coding prowess and professionalism
made it clear from the start that the right people were working on guiding the .NET development
community on the right way to build apps. I learned a ton in the process and
hopefully contributed something that helped make Prism a better product. So, naturally
I was delighted when I got the chance to work closely with the team again on the release
of Prism 4.
Prism 4 offers many things to many people. One of the biggest misconceptions is that
because it offers so much, it is too big or too complicated for smaller apps. One of the
early design goals of Prism was to keep the concerns of Prism separated in the same way
Prism helps you separate your own application’s concerns in the presentation layer. I think
the team did a great job of doing that, and you can easily use just commands, or just
events, or just modularity, or just UI composition or some combination of the above in
ways that are minimally intrusive to the rest of your application code. Add to that the new
Model-View-ViewModel (MVVM) pattern guidance, Managed Extensibility Framework
(MEF) integration, and navigation functionality of Prism 4, and you have a great set of
tools in a toolkit that can help you develop apps of any size.