stefan lange | empira software gmbhst-lange.net/file.axd?file=2009/09/basta!09,+wpf...sollte in wpf...
TRANSCRIPT
WPFAnwendungsarchitektur
Stefan Lange | empira Software GmbH
AgendaArchitektur von WPF AnwendungenWozu überhaupt Architektur?Einfluss von WPF auf AnwendungsdesignComposite Application Guidance:Enterprise Framework (WPF / Silverlight)Von WPF nach Silverlight 3
Viele neue Paradigmen in WPFCode + XAMLDatenbindungControl-Templates & StylesData-TemplatesAnimationenAudio / VideoEffekte3D Grafiku.v.a.m
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
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
Vollkommene Trennung
UI Elemente haben 3 Aspekte
UI Element
Beschreibung LayoutControl-
Templates
Beschreibung Inhalt
Data-Templates
Spezielles VerhaltenEvents + Code
XAML
C#VB.NET(weitere)
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
Daten ins UIUI Elemente holen ihre Daten selber
Daten-ObjektUI Element Daten-Binding
• Type-Konverter• Formatierung• Validierung• schrittweiseverfeinerbar
• …
Data-Template
CODEBEISPIEL 1
MVP vs. MVVMBeides möglich; empfohlen MVVM
Auch möglich: MVVM + Presenter
View Presenter
Model
View
View Model
Model
auch:PresentationModel
auch:ApplicationModel
CODEBEISPIEL 2
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
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…
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…
Tipps zum Application ModelDirekt bei Projektbeginn
Application Model in eigene AssemblyTests auf dieser Assembly schreiben
Application Model wiederverwendenKeinen UI oder Datenbank Code verwenden
CODEBEISPIEL 3
Jenseits des Application ModelsDatenbankschicht
ApplicationModel
DataModel
DataproviderSQL Server
DataproviderWeb-Service
…
POCOs
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
Unterschiede in den SchichtenDie einzelnen Schichten haben unterschiedliche ZuständigkeitenSie ähneln sich nur am Anfang eines Projekt und „wachsen später auseinder“
BeispielHotelreservierungssystem:Ausstattung eines Hotelzimmers
Hotel bietet verschiedene ZimmerkategorienZimmer haben verschiedene Extras
DatenbankTabellensturktur
Tabelle:Zimmer
Tabelle:Extras
Tabelle:Zimmer
xExtras
Tabelle mit allen Zimmern
Tabelle mit allen
Ausstattungsmerkmalen
Kreuztabelle mit den Extras
der Zimmer
Data ModelPOCOs (Plain old CLR Objects)
Klasse:Zimmer
Klasse:Extra
Enthält Liste der jeweiligen
Extras
Application ModelModellierung aus Sicht der Businesslogik
Beispielsweise Liste der
Zimmer mit diesem Extra
View ModelModellierung aus Sicht des UI
Liste aller möglichen Extras,„IstVorhanden“ kennzeichnet
die für diesen Zimmer verfügbaren
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
Aufteilung des Gesamtprojekts
„Horizontale“ Aufteilung in Schichten
„Vertikale“ Aufteilung in Module (Teilanwendungen)
CAGComposite Application Guidance
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#)
Von CAB zu CAG
Que
lle: M
icro
soft
Ziele und Nutzen von CAGZerlegbarkeitLeichtere ErlernbarkeitErweiterbarkeit/KonfigurierbarkeitKompatibilitätEinfachheitTestbarkeitPerformanceSowohl für WPF als auch für Silverlight
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
Grundstruktur einer CA
Que
lle: M
icro
soft
Verwaltet Regionsvon Views
Hält die Anwendung zusammen
Stellt Views und Services bereit
Bietet diverse Entwurfsmuster anModuleServicesCommandsInversion of ControlEvent Handling
UI Composition
Shell HauptfensterView UserControlRegion benannte Bereiche für Views Q
uelle
: Mic
roso
ft
Beispiel für ein Composite View
CODEBEISPIEL
WPF &Silverlight
WPF und SilverlightVon der Struktur her sehr ähnlich…
… aber viele Unterschiede in den Details
Que
lle: M
icro
soft
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 ☺
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, …)
Silverlight erzwingt SchichtenSilverlight kommuniziert über ServiesHorizontale Schichten sind notwendig
CODEBEISPIELE
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
Fragen /Diskussion