Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect

Slides:



Advertisements
Ähnliche Präsentationen
Powerpoint-Präsentation
Advertisements

Technischer Systemüberblick
SQL Server 2005.NET Integration Sebastian Weber Developer Evangelist Microsoft Deutschland GmbH.
Stefanie Selzer - Pascal Busch - Michael Kropiwoda
Universität Stuttgart Institut für Kernenergetik und Energiesysteme Was ist Refactoring? Bevor man die Integration angeht, mag es angebracht sein, den.
es gibt (fast) nichts, was nicht anders gemacht werden könnte
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 6 Model-View-Controler als Grundlage für Nutzerschnittstellen Sommersemester 2003 Lars Bernard.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 7 User Interfaces in Java Sommersemester 2003 Lars Bernard.
Struts Seminar Javabasierte Webanwendungen. Tobias Kutzler2 Überblick Historie Was ist Struts? Model Controller View Zusammenfassung.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Modellierung der Zugriffslogik auf Datenbanktabellen Software Component Technology for Distributed Applications Andreas Fink.
ENOVIA SmarTeam CATIA Integration
OO Analyse und Entwurf für Anwender XIII. Objektorientierte Benutzeroberfäche Dr. Michael Löwe.
Der VFP Debugger - Coverage und Profiling. © 1999 TMN-Systemberatung GmbH Der VFP Debugger n Neues Aussehen, eigene Task n Erweiterte Möglichkeiten n.
Uwe Habermann WPF Avalon Formulare aus VFP verwenden Venelina Jordanova
MSDN Webcast: VB.NET für Einsteiger und Umsteiger, Teil 10 Die erste, eigene Klassenbibliothek (Level 100) Presenter: Daniel Walzenbach Technologieberater.
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 7 Sitzung 7: User Interfaces in Java.
YouTube5 .0 Projektpräsentation
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Delphi II - OOP IFB Fortbildung
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 3 Folie 2 Layout (1) Zur Anordnung der Steuerelemente.
Silverlight Eine Einführung. Agenda 1.Was ist Silverlight? 2.Die Silverlight Philosophie 3.Vorstellung des Szenarios 4.Einführendes Beispiel 5.Konzepte.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 3 Folie 2 Windows Presentation Foundation (WPF) s.a.
TWS/Graph HORIZONT Produkt-Präsentation Software für Rechenzentren
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 6 Folie 2 Routed Events s.a.
Vortrag D. Braun, Praktikum. Übersicht Pleopatra API Pleopatra Tools Twitter Demonstration Ausblick.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 12 Folie 2 Web Services (1)
Aurich – Jonas Jacobi OSGi Tutorial Aurich – Jonas Jacobi Das OSGi Service Framework Dynamisches Modulsystem für Java Dynamische.
SQL Server 2005 CLR-Integration
Mit 3 Schichte zum Erfolg
HORIZONT 1 XINFO ® Das IT - Informationssystem Java Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
Generalisierung/Spezialisierung Subtypisierung/Vererbung
Gruppe: Gewinnt Überblick 1.0 (Martin Kapfhammer)
Das Model-View-ViewModel-Pattern
Dariusz Parys Developer Evangelist Microsoft Deutschland GmbH Christian Weyer Solutions Architect thinktecture.
Windows Presentation Foundation WS 2013/14 Prof. Dr. Herrad Schmidt
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 8 Folie 2 Commands (1) s.a.
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 5 Folie 2 Dependency Properties s.a.
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 2 Folie 2 XAML (1) s.a.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 1 Folie 2 Microsoft.NET Framework: Quelle:
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 7 Folie 2 Styles (1) s.a.
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 11 Folie 2 Model-View-ViewModel s.a.
Entwicklung verteilter Anwendungen II, SS 13 Prof. Dr. Herrad Schmidt SS 2013 Kapitel 6 Folie 2 WCF Data Services (1) s.a.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 5 Folie 2 ADO.NET s.a:
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 9 Folie 2 ADO.NET (1) Klassen für Zugriffe.
Entwicklung verteilter Anwendungen II, SS 13 Prof. Dr. Herrad Schmidt SS 13 Kapitel 2 Folie 2 ASP.NET HTTP-Handler (1)
Spring Framework.
HORIZONT 1 XINFO ® Das IT - Informationssystem PL/1 Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
Bonn-to-code.net Nutzung von.NET User Controls in Legacy Code Sascha Lehmann
Aufgaben Version 1: Es soll eine Wetterstation mit folgenden zwei Anzeigen implementiert werden: Aktuelle Wetterbedingungen mit Temperatur und.
Agenda Rückblick 2. Aufbau der Software Benutzeroberfläche 4. Ausblick
Das IT - Informationssystem
Caliburn.Micro.
Torque in Turbine Team 4 Josef Bohninger Thomas Lindenhofer
Vortrag: Frames & Javascript.
© 2014 Fake the Unfakeable Isolating Code Under Test with Microsoft Fakes ©
Thomas Schissler – artiso solutions GmbH Artur Speth – Microsoft Deutschland GmbH.
Software Architektur für on-premise und die Cloud Lösungen
prof. dr. dieter steinmannfachhochschule trier © prof. dr. dieter steinmann Folie 1 vom Montag, 30. März 2015.
Daniel Greitens | maximago Performanceoptimierung in WPF und Silverlight User Interfaces 15:30.
Das IT - Informationssystem
Monatsbericht Ausgleichsenergiemarkt Gas – Oktober
Christian Binder Senior Platform Strategy Manager Microsoft Deutschland GmbH.
© 2012 TravelTainment Einführung in Enterprise JavaBeans Seminarvortrag von Ralf Penners Folie 1 von 34.
Tutorium Software-Engineering SS14 Florian Manghofer.
Gewachsene Architektur Das kann nicht funktionieren!
Informatik Softwareentwicklung – 4.3 Entwurfsmuster
 Präsentation transkript:

Applikationsarchitektur modularer Rich Client-Anwendungen am Beispiel der Windows Presentation Foundation Jörg Jooss MTC Architect OOP 2009

2 Das Szenario Rich Client-Anwendung (WPF, C#) von geringer Software-Qualität Design Patterns, Composite Application Library (CAL) Modulare Anwendung mit deutlicher höherer Software-Qualität überführen

3 Hintergrund: Qualitätsmerkmale Maintainability: A set of attributes that bear on the effort needed to make specified modifications (ISO 9126) StabilityAnalyzabilityChangeabilityTestability

Iteration 0: Die Applikation

5 Iteration 0: Bestandsaufnahme 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 BeobachtungenSoftware-Qualität

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

7 Hintergrund: Presentation Model Benutzerinteraktion ViewView Presentation Model Business Logic Businessness Logic API Events Commands Data Binding

8 Hintergrund: Commands Receiver+Action<T> +Func +Func Receiver+Action<T> ICommand+Execute+CanExecute+CanExecuteChangedICommand+Execute+CanExecute+CanExecuteChangedDelegateCommand+Execute+CanExecute+CanExecuteChangedDelegateCommand+Execute+CanExecute+CanExecuteChanged InvokerInvoker In CAL In WPF

Iteration 1: Shell und Presentation Model

10 Iteration 1 – The Story So Far… Commands definiert: O PEN, C LOSE und E XIT Presentation Model (PM) implementiert E XIT implementiert Datenbindung zwischen Views und PM Neu MainWindow zur Shell reduziert Utility-Klassen entfernt Geändert oder entfernt

11 Iteration 1: Bestandsaufnahme 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… BeobachtungenSoftware-Qualität

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)

13 Iteration 2: File Open …? (contd) 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

14 Hintergrund: Event Aggregator PublisherPublisherSubscriberSubscriber PublisherPublisher SubscriberSubscriber SubscriberSubscriber Event Aggregator CompositeWpfEvent<T>CompositeWpfEvent<T> CompositeWpfEvent<U>CompositeWpfEvent<U>

Iteration 2: Events und Services

16 Iteration 2 – The Story So Far… Funktionalität zum Öffnen von Dateien als Service gekapselt (IF ILE P ROVIDER und D IALOG F ILE P ROVIDER ) Das Ereignis F ILE C HANGED E VENT in neuer Assembly X ML E XPLORER S HARED definiert Property C URRENT F ILE zur Verwaltung der aktuell geöffneten Datei ergänzt löst F ILE C HANGED E VENT aus Presentation Model erfordert nun IE VENT A GGREGATOR und IF ILE P ROVIDER Neu O PEN und C LOSE implementiert Setzen C URRENT F ILE Geändert oder entfernt

17 Iteration 2: Bestandsaufnahme Konsumenten von Ereignissen in der Shell bleiben durch Publish/Subscribe lose gekoppelt Bereitstellung technischer Funktionen als Services erhöht Testbarkeit F ILE C HANGED E VENT ist momentan die einzige Gemeinsamkeit zwischen Provider (Shell) und potentiellen Konsumenten Es fehlt jedoch die Integration der Services BeobachtungenSoftware-Qualität

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

19 Kern eines Depedency Injection Containers Hintergrund: Dependency Injection BuilderBuilderIServiceIService ServiceImplServiceImpl ClientClient <<creates>> <<injects>>

Iteration 3: Bootstrapper und Dependency Injection

21 Iteration 3 – The Story So Far… Bootstrapper implementiert Dependency Injection-Container für Shell konfiguriert Neu Presentation Model und Shell nun DI friendly Startvorgang nun Application Boostrapper Container Shell, vorher Application Shell Geändert oder entfernt

22 Iteration 3: Bestandsaufnahme 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… BeobachtungenSoftware-Qualität

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

Iteration 4: Views und Services in einem Modul

25 Iteration 4 – The Story So Far… Neue Assembly X ML E XPLORER M ODULE XML-Verarbeitung in Service gekapselt Ursprüngliche XML-UI samt Ressourcen und Utility-Klassen in UserControl E XPLORER V IEW verlagert E XPLORER V IEW P RESENTATION M ODEL implementiert und für F ILE C HANGED E VENT registriert NeuGeändert oder entfernt

26 Iteration 4: Bestandsaufnahme 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? BeobachtungenSoftware-Qualität

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 IM ODULE implementieren

Iteration 5: Das IModule

29 Iteration 5: The Story So Far… IM ODULE implementiert IU NITY C ONTAINER als modul-interner Service Container für Modul konfiguriert NeuGeändert oder entfernt

30 Iteration 5: Bestandsaufnahme Ein IM ODULE 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? BeobachtungenSoftware-Qualität

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

32 Hintergrund: Regions Name der Region Tipp: Binden statt hart codieren Name der Region Tipp: Binden statt hart codieren ContentControls, Selectors, und ItemControls können mit Regionen dekoriert werden

Iteration 6: Die modulare Anwendung

34 Iteration 6: Abschluss IR EGION M ANAGER wird von CAL bereitgestellt R EGION N AMES IN X ML E XPLORER S HARED zur Verwaltung von Region-Ids C ONTENT C ONTROL zur Anzeige von Views in der Region M AIN R EGION in der Shell Neu IR EGION M ANAGER im Modul als Abhängigkeit ergänzt View in der Region M AIN R EGION angezeigt IM ODULE E NUMERATOR in der Shell zum Laden des Moduls Geändert oder entfernt

35 Iteration 6: Bestandsaufnahme 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 BeobachtungenSoftware-Qualität

36 Zusammenfassung Modulare WPF-Anwendungen mit der Composite Application Library Commands/ Events Services/ Container BootstrapperModule Regions/ Views

37 Ressourcen Composite Application Guidance und CAL patterns & practices Developer Center MTC München Team Blog (Code zur Session)