Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation...
-
Upload
zelda-wicka -
Category
Documents
-
view
103 -
download
0
Transcript of Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation...
![Page 1: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/1.jpg)
Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der
Windows Presentation Foundation
Jörg JoossMTC Architect
[email protected]://blogs.msdn.com/mtcmuc/
OOP 2009
![Page 2: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/2.jpg)
2
Das SzenarioDesign Patterns, Composite Application Library (CAL)
Modulare Anwendung mit deutlicher höherer Software-Qualität überführen
![Page 3: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/3.jpg)
3
Hintergrund: Qualitätsmerkmale
Maintainability: A set of attributes that bear on the effort needed to make specified modifications
(ISO 9126)
Stability Analyzability Changeability Testability
![Page 4: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/4.jpg)
Iteration 0: „Die Applikation“
Demo
![Page 5: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/5.jpg)
5
Iteration 0: Bestandsaufnahme
Beobachtungen
• Autonomous View (Anti-)Pattern: Applikationslogik und Präsentationslogik sind vermischt• Fehlende Abstraktionen• 95% der Applikationslogik liegen in einer Methode• Unit Testing sehr schwierig• Code bietet kaum Möglichkeiten zur Aufteilung zwischen Teams• Erweiterungen nach dem gleichen Entwicklungsansatz führen unweigerlich zum „Big Ball of Mud“
Software-Qualität
![Page 6: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/6.jpg)
6
Iteration 1: Separate Presentation
Um den Big Ball of Mud zu verhindern, müssen wir die Präsentation vom Rest
der Anwendung trennen
Konkrete Design Patterns:• Model-View-Controller• Model-View-Presenter• Presentation Model
WPF und CAL geben jeweils keinen Ansatz vor – aber in WPF ist Presentation
Model sehr einfach zu realisieren
![Page 7: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/7.jpg)
7
Hintergrund: Presentation ModelBenutzerinteraktion
View
Presentation Model
Business Logic
Businessness LogicAPI
Events
Commands Data Binding
![Page 8: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/8.jpg)
8
Hintergrund: Commands
Receiver+Action<T>+Func<T, bool>
ICommand+Execute+CanExecute+CanExecuteChanged
DelegateCommand
+Execute+CanExecute+CanExecuteChanged
Invoker In CAL
In WPF
![Page 9: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/9.jpg)
Iteration 1: Shell und Presentation Model
Code…
![Page 10: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/10.jpg)
11
Iteration 1: Bestandsaufnahme
Beobachtungen
• View enthält keine Anwendungslogik und ist vom Presentation Model entkoppelt• Unit Testing des PM möglich (Unit Test als alternativer View)• Applikationslogik kann nach Belieben realisiert werden• Die Features von WPF (Datenbindung, Commands etc.) werden genutzt • Mehr als ein leeres Fenster haben wir jetzt aber nicht…
Software-Qualität
![Page 11: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/11.jpg)
12
Iteration 2: File → Open → …?
Wie zeigen wir ein Dialogfenster an, ohne das Presentation Model ad absurdum zu
führen?
Einfachste Lösung: Indirektion – Auslagern in eine andere Komponente
„Service“ = Interface + Implementierung(en)
![Page 12: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/12.jpg)
13
Iteration 2: File → Open → …? (cont’d)
Vermeide Abhängigkeiten zwischen Shell und Applikationskomponenten – wie aber
werden Informationen aus der Shell propagiert?
C#-Events helfen nicht –der Subscriber kennt den Publisher
bereits zur Buildtime
CAL stellt den Event Aggregator als Publish/Subscribe-Mechanismus bereit
![Page 13: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/13.jpg)
14
Hintergrund: Event Aggregator
Publisher Subscriber
Publisher
Subscriber
Subscriber
Event Aggregator
CompositeWpfEvent<T>
CompositeWpfEvent<U>
![Page 14: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/14.jpg)
Iteration 2: Events und Services
Code…
![Page 15: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/15.jpg)
17
Iteration 2: Bestandsaufnahme
Beobachtungen
• Konsumenten von Ereignissen in der Shell bleiben durch Publish/Subscribe lose gekoppelt• Bereitstellung technischer Funktionen als Services erhöht Testbarkeit• FILECHANGEDEVENT ist momentan die einzige Gemeinsamkeit zwischen Provider (Shell) und
potentiellen Konsumenten• Es fehlt jedoch die Integration der Services
Software-Qualität
![Page 16: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/16.jpg)
18
Iteration 3: Connecting the Dots
Wir wollen die losen Teile (Shell, Presentation Model, Services) verbinden,
zugleich aber die Verbindungen leicht ändern können
Dependency Injection-Container erlauben die Konstruktion von Objekten und deren
Abhängigkeiten
CAL bietet• Dependency Injection-Container
(Unity)• Bootstrapper
![Page 17: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/17.jpg)
19
Kern eines Depedency
Injection Containers
Hintergrund: Dependency Injection
BuilderIService
ServiceImpl
Client<<creates>>
<<injects>>
![Page 18: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/18.jpg)
Iteration 3: Bootstrapper und Dependency Injection
Code…
![Page 19: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/19.jpg)
22
Iteration 3: Bestandsaufnahme
Beobachtungen
• Abhängigkeiten zwischen den Komponenten sind nicht hart codiert, sondern über Dependency Injection flexibel änderbar
• Testkonfigurationen können so das System entsprechend rekonfigurieren und Stubs, Fakes etc. verwenden
• Wir haben immer noch nur ein leeres Fenster…
Software-Qualität
![Page 20: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/20.jpg)
23
Iteration 4: Module für die Massen
Wir wollen ein Konstrukt bereitstellen, das die eigentliche Anwendungslogik über alle Schichten kapselt – Module
Solche Module können auf verschiedene Weise geschnitten werden:• Infrastrukturkomponenten• Anwendungsfeatures• Subsysteme
CAL bietet die Infrastruktur zur Bereitstellung von Assemblies als Module
![Page 21: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/21.jpg)
Iteration 4: Views und Services in einem Modul
Code…
![Page 22: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/22.jpg)
26
Iteration 4: Bestandsaufnahme
Beobachtungen
• Ein Modul ist ein mehrschichtiger, in sich abgeschlossener Applikationsbaustein• Wie die Shell verwendet es PM, Commands, Pub/Sub und User Controls als Views• Hohe Kohäsion, niedrige Kopplung• Event Aggregator erleichtert Thread Marshalling• Die Implementierung verschiedener Module kann auf mehrere Teams aufgeteilt werden• Aber was macht eine Assembly eigentlich zum Modul?
Software-Qualität
![Page 23: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/23.jpg)
27
Iteration 5: I, Module
Uns fehlt eine Möglichkeit das Modul zu initialisieren (Bootstrapper?)
Kennzeichnung von „Modulkomponenten“• Attribute• Interfaces• Basisklassen• Konvention
CAL sucht in einer Assembly nach Typen, die IMODULE implementieren
![Page 24: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/24.jpg)
Iteration 5: Das IModule
Code…
![Page 25: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/25.jpg)
30
Iteration 5: Bestandsaufnahme
Beobachtungen
• Ein IMODULE agiert wie ein modulspezifischer Bootstrapper • Wie in der Shell können so Abhängigkeiten im Modul per DI konfiguriert werden• Abhängigkeiten des Moduls werden von CAL injiziert• Wie aber bringen wir Module zur Ausführung?
Software-Qualität
![Page 26: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/26.jpg)
31
Iteration 6: How to Be Found and Seen
Die Shell benötigt Mechanismen zum Finden von Modulen und Platzhalter zur
Anzeige von Views
Direkte Referenzen zwischen Shell und Modulen führen zu enger Kopplung
CAL bietet• Module Enumerators• Regions
![Page 27: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/27.jpg)
32
Hintergrund: Regions
<ContentControl cal:RegionManager.RegionName=
"{x:Static fx:RegionNames.MainRegion}" />
Name der RegionTipp: Binden statt hart
codieren
ContentControls, Selectors, und
ItemControls können mit Regionen dekoriert
werden
![Page 28: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/28.jpg)
Iteration 6: Die modulare Anwendung
Demo
![Page 29: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/29.jpg)
35
Iteration 6: Bestandsaufnahme
Beobachtungen
• Die Shell muss Regionen zur Anzeige von Views vorsehen und benennen• Shell und Module/Views sind komplett entkoppelt, kennen jeweils nur
Regionenbezeichner und Ereignisse• Die Strategie zum Finden von Modulen ist austauschbar
Software-Qualität
![Page 30: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/30.jpg)
36
Zusammenfassung
Modulare WPF-Anwendungen mit der Composite Application Library
Commands/Events
Services/Container
Bootstrapper
ModuleRegions/
Views
![Page 31: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/31.jpg)
37
Ressourcen
Composite Application Guidance und CAL
• http://www.codeplex.com/CompositeWPF• http://msdn.microsoft.com/en-us/library/cc707819.aspx
patterns & practices Developer Center
• http://msdn.microsoft.com/en-us/practices/default.aspx
MTC München Team Blog (Code zur Session)
• http://blogs.msdn.com/mtcmuc/
![Page 32: Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect joerg.jooss@microsoft.com.](https://reader038.fdocuments.in/reader038/viewer/2022110117/55204d7549795902118ca003/html5/thumbnails/32.jpg)