Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF...

45
WPF Anwendungsarchitektur Stefan Lange | empira Software GmbH

Transcript of Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF...

Page 1: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

WPFAnwendungsarchitektur

Stefan Lange | empira Software GmbH

Page 2: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

AgendaArchitektur von WPF AnwendungenWozu überhaupt Architektur?Einfluss von WPF auf AnwendungsdesignComposite Application Guidance:Enterprise Framework (WPF / Silverlight)Von WPF nach Silverlight 3

Page 3: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

Viele neue Paradigmen in WPFCode + XAMLDatenbindungControl-Templates & StylesData-TemplatesAnimationenAudio / VideoEffekte3D Grafiku.v.a.m

Page 4: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

XAML und Code BehindApplications = Code + Markup ?

Code.net Sprache / Code Behind

MarkupXAML

Ursprünglich:XML Avalon Markup

Language

+Problem: Zweck der Code

Behind Datei wird überbewertet

Page 5: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

XAML„Dynamische Sprache“ für OberflächeGut geeignet für DesignerTrennt UI-Beschreibung und Code

Problem: Oftmals wandern wesentliche Teile der Applikationslogik in die Code Behind Datei

Page 6: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

Vollkommene Trennung

UI Elemente haben 3 Aspekte

UI Element

Beschreibung LayoutControl-

Templates

Beschreibung Inhalt

Data-Templates

Spezielles VerhaltenEvents + Code

XAML

C#VB.NET(weitere)

Page 7: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

Push vs. PullCode „drückt“ Daten in die Oberfläche

z.B.: Listbox.AddItem(…)enge Kopplung von Code und UIsollte in WPF nicht verwendet werden

UI „zieht“ die Daten selbstd.h. Databindinglockere Kopplung von UI und DatenUI kann leicht geändert werdenbevorzugte Methode in WPF

Page 8: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

Daten ins UIUI Elemente holen ihre Daten selber

Daten-ObjektUI Element Daten-Binding

• Type-Konverter• Formatierung• Validierung• schrittweiseverfeinerbar

• …

Data-Template

Page 9: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

CODEBEISPIEL 1

Page 10: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

MVP vs. MVVMBeides möglich; empfohlen MVVM

Auch möglich: MVVM + Presenter

View Presenter

Model

View

View Model

Model

auch:PresentationModel

auch:ApplicationModel

Page 11: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

CODEBEISPIEL 2

Page 12: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

Model - View - ViewModelBevorzugtes Paradigma für WPFModellierung der Daten passend zur PräsentationViewModel kann wiederverwendet werdenViewModel unabhängig vom UICode Behind Datei ist kein ViewModel

Page 13: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

Eigenschaften View ModelKlassen eines ViewModels

Implementieren INotifyPropertyChangedGgf. abgeleitet von DependencyObjectImplementieren ggf. Dependency PropertiesVerwenden ObservableCollectionLösen in Settern PropertyChanged Event ausLaufen ausschließlich im UI-ThreadVerarbeiten Events vom UIValidierung des UILesen und schreiben Daten aus/ins Model…

Page 14: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

Eigenschaften Application ModelKlassen des Application Models

Modellieren die Funktionalität der Anwendung unabhängig von einem konkreten UIVerwenden keine UI FunktionalitätLesen und schreiben Daten von/in Data Provider (Datenbank, Web-Service, …)Laufen ggf. in Background-Thread (asynchron)Können automatisiert getestet werdenValidieren die Daten im Gesamtkontext…

Page 15: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

Tipps zum Application ModelDirekt bei Projektbeginn

Application Model in eigene AssemblyTests auf dieser Assembly schreiben

Application Model wiederverwendenKeinen UI oder Datenbank Code verwenden

Page 16: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

CODEBEISPIEL 3

Page 17: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

Jenseits des Application ModelsDatenbankschicht

ApplicationModel

DataModel

DataproviderSQL Server

DataproviderWeb-Service

POCOs

Page 18: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

Data ModelKlassen des Data-Models

„Plain old CRL Objects“ (POCO)Modellieren beispielsweise Datenbank EntitätenLassen sich serialisieren…

Code wird oft generiert (OR-Mapping)NhibernateADO.NET Entity Frameworkdiverse weitere OR-Mapper

Page 19: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

Unterschiede in den SchichtenDie einzelnen Schichten haben unterschiedliche ZuständigkeitenSie ähneln sich nur am Anfang eines Projekt und „wachsen später auseinder“

Page 20: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

BeispielHotelreservierungssystem:Ausstattung eines Hotelzimmers

Hotel bietet verschiedene ZimmerkategorienZimmer haben verschiedene Extras

Page 21: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

DatenbankTabellensturktur

Tabelle:Zimmer

Tabelle:Extras

Tabelle:Zimmer

xExtras

Tabelle mit allen Zimmern

Tabelle mit allen

Ausstattungsmerkmalen

Kreuztabelle mit den Extras

der Zimmer

Page 22: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

Data ModelPOCOs (Plain old CLR Objects)

Klasse:Zimmer

Klasse:Extra

Enthält Liste der jeweiligen

Extras

Page 23: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

Application ModelModellierung aus Sicht der Businesslogik

Beispielsweise Liste der

Zimmer mit diesem Extra

Page 24: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

View ModelModellierung aus Sicht des UI

Liste aller möglichen Extras,„IstVorhanden“ kennzeichnet

die für diesen Zimmer verfügbaren

Page 25: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

Beispiel: NeuanforderungFarbliche Kennung der Zimmerkategorie:

Feld in Data Model ergänzenFeld in Application Model ergänzenColor Property im View ModelProperty im View an Farbe binden

Durch Trennung der Zuständigkeiten sind Änderungen einfach und nachvollziehbarOberfläche wird durch Daten gesteuert, weniger durch Code

Page 26: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

Aufteilung des Gesamtprojekts

„Horizontale“ Aufteilung in Schichten

„Vertikale“ Aufteilung in Module (Teilanwendungen)

Page 27: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

CAGComposite Application Guidance

Page 28: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

CAG – Was ist das?Composite Application Guidance

Framework für „Enterprise-Level“ WPFund Silverlight AnwendungenVon „Patterns and Practices“, Microsoft

CAG „Library/Framework plus Leitfaden“

Quellcode und diverse Community Erweiterungen auf Codeplex

Gute Quick-Start Beispiele (VB und C#)

Page 29: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

Von CAB zu CAG

Que

lle: M

icro

soft

Page 30: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

Ziele und Nutzen von CAGZerlegbarkeitLeichtere ErlernbarkeitErweiterbarkeit/KonfigurierbarkeitKompatibilitätEinfachheitTestbarkeitPerformanceSowohl für WPF als auch für Silverlight

Page 31: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

Vorteile des modularen AufbausModule können getrennt entwickelt und getestet werdenVerringerung der Download Zeit duch Nachladen (ClickOnce / XBAB / Silverlight)Module könnten in unterschiedlichen Programmiersprachen geschrieben werdenAbhängig von der Rolle des Benutzers konfigurierbar

Page 32: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

Grundstruktur einer CA

Que

lle: M

icro

soft

Verwaltet Regionsvon Views

Hält die Anwendung zusammen

Stellt Views und Services bereit

Page 33: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

Bietet diverse Entwurfsmuster anModuleServicesCommandsInversion of ControlEvent Handling

Page 34: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

UI Composition

Shell HauptfensterView UserControlRegion benannte Bereiche für Views Q

uelle

: Mic

roso

ft

Page 35: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

Beispiel für ein Composite View

Page 36: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

CODEBEISPIEL

Page 37: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

WPF &Silverlight

Page 38: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

WPF und SilverlightVon der Struktur her sehr ähnlich…

… aber viele Unterschiede in den Details

Que

lle: M

icro

soft

Page 39: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

WPF und SilverlightSzenario:

Anwendung als WPF Desktop konzipiertKunde will noch Web-Variante mit Silverlight

Code-Behind Programmierer:Fängt praktisch wieder von vorne anMaximal „Cut & Paste“ Wiederverwendung

Software Architekt:Wiederverwendung großer Teile des Codes ☺

Page 40: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

Von WPF nach SilverlightEs kann wiederverwendet werden

Das eigene WPF KnowhowApplication ModelView ModelCAG Infrastruktur Code

Nicht wiederverwendet werden kannXAML Code (nur Cut & Paste möglich)(UI, Themes, Styles, …)

Page 41: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

Silverlight erzwingt SchichtenSilverlight kommuniziert über ServiesHorizontale Schichten sind notwendig

Page 42: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

CODEBEISPIELE

Page 43: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

FazitDas Design von WPF ist optimal für moderne AnwendungsarchitekturProgrammiersprache spiel praktisch keine RolleMit CAG gibt es eine gute Grundlage für große modulare Anwendungen

Page 44: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

Kontakt

Danke für´s zuhören!

[email protected]

www.st-lange.net (in Kürze)

Page 45: Stefan Lange | empira Software GmbHst-lange.net/file.axd?file=2009/09/Basta!09,+WPF...sollte in WPF nicht verwendet werden UI „zieht“ die Daten selbst d.h. Databinding lockere

Fragen /Diskussion