2. Introduction to Composite
Application Guidance aka “Prism”
Building Silverlight and WPF applications with
Composite Applications Guidance and
Composite Application Library
Don Burnett
http://blog.donburnett.com
3. Prism is compliant with your development process
• design patterns like Model- • Code-Behind minimalist
View-View Model and • Modular, Composite
Model-View-Presenter Application
• Test-Driven Development • Distributed Agile Team
(TDD) • Fluent Interfaces
• Loosely Coupled • Multi-Targeting Silverlight
• Separation of Concerns and WPF
(SoC) • Routed Commands &
• Interface-based Routed Events
Programming • High Performance Dev
• Dependency Injection (DI) • Data Binding
• Inversion of Control (IoC)
Containers
4. Topics
• Targeting Silverlight or WPF
– Managing complexity
– Best practices for testing and design
patterns
• Focus around UI concerns
– XAML, Code-behinds, Data Binding
• Using Prism
– Runtime Library + Guidance + Project Linker
5. Related Technologies
• Windows Presentation Foundation
(WPF), Silverlight, XAML
• Unit Testing (nUnit), TDD
• Dependency Injection (DI), Inversion
of Control (IoC), Loose coupling
• UI Design Patterns (MVC, MVP)
6. Goals
• Appreciate value of C-A-G for Silverlight and
WPF
• Demonstrate a few key Prism concepts
• A little WPF, Silverlight; discuss a couple of
Design Patterns / Anti-Patterns
7. Terminology
• Composite Application Guidance for
WPF and Silverlight Version 2
• Composite Application Library for WPF
and Silverlight runtime support
included – sometimes called “CAL”
9. • Long development
cycles
Product Groups • Strategic
• Big Teams
• Costs
• Support
Patterns & Practice Group
• Rapid cycle times
• Small, focused agile teams
• Ship tactical solutions now
• EntLib, Unity, Arch Guide – Code and Guidance
• CAB, Prism v1, Prism v2 • Open Source
• Legacy free
11. Shell, Regions, Views
• Shell is main window for applications
• Shell defines (visual) Regions
• Regions control where UI will appear -dynamic
• Views are displayed within a region
• WPF/Silverlight design, code, tooling is
complimentary – Composite Application
Guidance brings it together
12. Views and Modules
• Modules are DLLs (Projects)
• You can decide which modules to load
• Modules can be configured to load code, XML,
or XAML
• Modules can be downloaded
– Can write your own rules for loading
• Modules have Views (usually)
13. Events
• .NET events are tightly coupled (references in
both directions)
• WPF events
– Loosely coupled and limited to same visual tree
• Composite events
– Loose coupling; not limited to same visual tree
• More: Force to UI thread; event filtering
• Events are triggered through commanding.
15. Why Separate UI from Code?
• Improves Developer / Designer interaction
• Develop in Visual Studio and Design in Expression
Blend
• Easier Testing- now possible to Unit Test (vs.
Integration Test)
– Simpler issue of isolation
• Reuse opportunity goes way up
– Same ViewModel can be reused with UI variations
• Better organized code is easier to understand and
maintain. SE Principles: SoC, coupling, cohesion, SRP
(rendering, mouse & keyboard, disabled, hover)
16. How to Separate Concerns in UI?
• Use Code-Behinds reluctantly + M-V-VM
• M-V-VM Model-View-ViewModel Pattern
• Abbreviated as M-V-VM, MVVM
• Referred to as ViewModel
• Presentation Model pattern where View knows
about ViewModel
• Documentation refers to it as Presentation
Model
• ViewModel pattern is the more common term.
17. Advantages
Commanding also spans View & ViewModel
No UI in VM
MVP is a delegation model – MVVM handles
this with data binding – way less code in the
code-behind
Silverlight controls don’t automatically
implement Icommand so this is extremely
useful.
18. ViewModel Pattern
Load external data
from web services,
etc.
View Data Binding ViewModel Your Code Model
Supported by WPF / SL
C-A-G provides an
Automapper to smartly
map your data to the view.
19. Code-Behind Pattern (Old Way)
Load external data
from web services,
etc.
View Observable Collections/Code Model
Code Behind for each Control
Supported by WPF / SL
20. Prism Still In the Wild
• You build it
• Microsoft Patterns and Practice does not ship
a binary at this time.
• No Prism-specific templates for Visual Studio
(YET!)
• Cannot unload a Module.. Choose what you
load WISELY..
21. When to go Composite?
• You are designing “complex” WPF or
Silverlight applications, helpful in Line of
Business situations.
• You are building an application that presents
information from multiple sources through an
integrated user interface.
• You are developing, testing, and deploying
modules independently of other modules.
22. When to go Composite?
• Your application will add more views and more
functionality over the coming years, or…
• You must be able to change the app quickly and
safely to meet emergent business requirements,
or…
• Your application is being developed by multiple
collaborating teams; or…
• Your application targets both WPF and Silverlight,
and you want to maximize code sharing between
platforms.
23. When to NOT go Composite?
• Your applications do not require any of the
above scenarios.
• Your application consists of a few simple
screens.
• You are prototyping.
• Your developers do not have the time to learn
about Composite Application Guidance.
24. Advantages
• SoC + SRP + reducing plumbing code + Unit Tests
is the best way to handle complexity and enable
ability to respond rapidly to changing
requirements.
• M-V-VM best design/development pattern to
support application development in Silverlight
and WPF.
26. Watch these spaces
• “Contrib” site @
http://compositewpfcontrib.codeplex.com/
• Channel 9 for tutorial videos
– http://channel9.msdn.com/tags/Prism/
• Infragistics control adapters for Prism @
http://ncal.codeplex.com/
– Region Adaptors for Prism
28. Other Resources
• Josh Smith on MVVM with WPF:
http://msdn.microsoft.com/en-
us/magazine/dd419663.aspx
• Brian Noyes on Understanding Routed Events and Routed
Commands in WPF: http://msdn.microsoft.com/en-
us/magazine/cc785480.aspx
• WPF Commanding Overview:
http://msdn.microsoft.com/en-us/library/ms752308.aspx
• Martin Fowler’s description of Presentation Model pattern:
http://martinfowler.com/eaaDev/PresentationModel.html
• XAML Guidelines for Creating a Composite UI:
http://msdn.microsoft.com/en-us/library/dd458877.aspx
29. Thanks for Attending..
Building Silverlight and WPF applications with
Composite Applications Guidance and
Composite Application Library
Don Burnett
http://blog.donburnett.com