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

Preview:

Citation preview

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

Kontakt

Danke für´s zuhören!

Stefan.Lange@empira.de

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

Fragen /Diskussion

Recommended