architecting wpf applications

51
Architecting WPF Applications Paul Stovell Senior Consultant WPF Technical Specialist Readify

Upload: paul-stovell

Post on 18-Dec-2014

4.421 views

Category:

Technology


2 download

DESCRIPTION

A presentation given at the Sydney Architecture User Group.

TRANSCRIPT

Page 1: Architecting WPF Applications

Architecting WPF Applications

Paul StovellSenior Consultant

WPF Technical SpecialistReadify

Page 2: Architecting WPF Applications
Page 3: Architecting WPF Applications

Agenda WPF Overview Inductive vs. Deductive UI Navigation Presentation Patterns Composition Inter-view Communication Dependency Injection Partitioning Leveraging XAML Performance Considerations

Page 4: Architecting WPF Applications

WPF Overview

Page 5: Architecting WPF Applications

Unified Presentation

GDI/Windows

Forms

COM Interop

Flash DirectX PDF WPF

Interactive UI

controls

Documents 3D

Animation

Video

Page 6: Architecting WPF Applications

Web or Windows?

Windows Intranet Internet

Silverlight

Windows Forms

JavaJava

Applets

WPF XBAP

WPF

ASP.NET

AJAX

Page 7: Architecting WPF Applications

XBAP

Page 8: Architecting WPF Applications

XBAP

Page 9: Architecting WPF Applications

WPF Releases

.NET Framework 3.0 .NET Framework 3.5 .NET Framework 3.5 Service Pack 1 .NET Framework 4.0

Page 10: Architecting WPF Applications

Inductive vs. Deductive

Page 11: Architecting WPF Applications

Deductive UI

Page 12: Architecting WPF Applications

Deductive UI

Page 13: Architecting WPF Applications

Inductive UI

Page 14: Architecting WPF Applications

Inductive UI

Page 15: Architecting WPF Applications

Inductive vs. Deductive

Why does it matter? UI composition Patterns Navigation Patterns Service Layer

ChangeAddress vs. SaveCustomer

Page 16: Architecting WPF Applications

DataGrid

Page 17: Architecting WPF Applications

Navigation

Page 18: Architecting WPF Applications

Linked List

Page 1 Page 2 Page 3 Page 4

Page 19: Architecting WPF Applications

Centralized Decisions

Page 1

Page 2

Page 3

Page 4

Navigation Handler

Page 20: Architecting WPF Applications

Presentation Patterns

Page 21: Architecting WPF Applications

Presentation Patterns

Model-View-ViewModel aka Presentation Model

Model-View-Presenter aka Supervising Controller

Model-View-Controller

Page 22: Architecting WPF Applications

Model View ViewModel

Change Address View

AccountsChange Address

ViewModel

Customer

Address

Model

Page 23: Architecting WPF Applications

Model View ViewModel (Wrapped)

Change Address View

Account VM

Change Address ViewModel

Customer VM

Address VM

View Model

Account

Customer

Address

Model

Page 24: Architecting WPF Applications

Model View Presenter

Change Address View

AccountsChange Address

Presenter

Customer

Address

Model

IChangeAddressView

Page 25: Architecting WPF Applications

Model View Presenter with VM

Change Address View

AccountsChange Address Presenter

Customer

Address

Model

IChangeAddressView

Change Address

ViewModel

State

Behaviour

Page 26: Architecting WPF Applications

Model View ControllerView 1

Controller

Model 1

View 2

Model 2

View 3

Model 3

Nav Request

Page 27: Architecting WPF Applications

Presentation Patterns

Things to consider: Does every view need separated

presentation? Does every view need to follow the

same pattern? Code Behind isn’t Evil (DataGrids are) MVPoo

Page 28: Architecting WPF Applications

UI Composition

Page 29: Architecting WPF Applications

Model-based Composition

Recent Orders ViewModel

Search ViewModel

Weather ViewModel

Order ListSearch

Weather

Page 30: Architecting WPF Applications

UI-based Composition

Order ListTop Region

Bottom Region

Bottom-Up

Search Weather

Navigation

1. Resolve

2. Place

Page 31: Architecting WPF Applications

UI-based Composition

Order ListTop Region

Bottom Region

Top-Down

Search Weather

Page 32: Architecting WPF Applications

Inter-View Communication

Page 33: Architecting WPF Applications

Inter-View CommunicationStandard .NET events

Search Model

Results Model

Criteria Model

1. Child model raises event

2. Parent model forwards event

Page 34: Architecting WPF Applications

Inter-View CommunicationEvent Aggregator

Results Model

Criteria Model hubPublish

Handle

Advert Model

Handle

Recent Searches

Model

Publish

Page 35: Architecting WPF Applications

Event Aggregator

Advantages: Automatic thread switching Weak events Hook for cross-cutting concerns

Page 36: Architecting WPF Applications

Dependency Injection

Page 37: Architecting WPF Applications

Dependency Injection

Page 38: Architecting WPF Applications

Partitioning

Page 39: Architecting WPF Applications

Partitioning

Splitting partitions: By SKU By feature By team By department

Page 40: Architecting WPF Applications

Partitioning

Managing partitions: With solutions With projects With assemblies

Page 41: Architecting WPF Applications

Partitioning

Resolving: Hard-coded Config Discovery

Page 42: Architecting WPF Applications

Partitioning

Also consider: Deployment and patching Inter-partition dependencies Dev time vs. build time partitioning

Page 43: Architecting WPF Applications

Partitioning

Remember: assemblies are like water

necessary for life……but too much can kill you!

Page 44: Architecting WPF Applications

Leveraging XAML

Page 45: Architecting WPF Applications

Abstractions<Grid> <..> <Label Grid.Row="0" Grid.Column="0" Content="First Name:" Target="{Binding ElementName=FirstNameTextBox}" /> <TextBox Grid.Row="0" Grid.Column="1" Name="FirstNameTextBox" Text="{Binding Path=FirstName}" /></Grid>

<Form> <Field For="{Binding Path=FirstName}" /> <Field For="{Binding Path=LastName}" /> <Field For="{Binding Path=EmailAddress}" /></Form>

Page 46: Architecting WPF Applications

Consistency<TextBlock Foreground="Red" Text="Please enter..." />

<TextBlock Foreground="{StaticResource Color.Bad}" Text="Please enter..." />

Page 47: Architecting WPF Applications

Style Catalogues<TextBox Width="300" .../><TextBox Width="156" .../><TextBox Width="215" .../>

<TextBox Style="{StaticResource TextBox.Big}" /><TextBox Style="{StaticResource TextBox.Small}" /><TextBox Style="{StaticResource TextBox.Medium}" />

Page 48: Architecting WPF Applications

Behaviours

Consider this:

Developers don't write code; they build

tools for designers

Page 49: Architecting WPF Applications

Performance Considerations

Page 50: Architecting WPF Applications

Performance Considerations

1. Retained scene vs. Immediate Mode2. Virtualization (data and UI)3. Memory leaks4. Third party components5. Performance test from day 1

Page 51: Architecting WPF Applications

Q&A

Links: http://www.codeplex.com/CompositeWPF http://magellan.codeplex.com http://www.galasoft.ch/mvvm/getstarted/ http://caliburn.codeplex.com

Paul [email protected]