Managed Extensibility Framework - die dynamische Softwareplattform auf .NET-Basis - W3L AG 2011
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
1 Managed Extensibility Framework – die dynamische Softwareplattform auf .NET-Basis W3L AG info@W3L.de 2011
2 Inhalt Motivation Managed Extensibility Framework (MEF) Überblick Beispiel Programmiermodell Framework Fazit zurück
3 Motivation Zwickmühle der Software-Technik Software-Technik erarbeitet immer bessere Abstraktionsmechanismen... Komplexität von Software nimmt immer weiter zu. Kurze Produktzyklen Höhere Anforderungen Customizing Modularisierung Altes »Hausmittel« der Software-Technik Prinzip der Trennung der Belange und ihrer Lokalisierung (principal of separation of concerns) Pioniere dieses Konzepts Edsger Dijkstra David Parnas Niklaus Wirth
4 Motivation Änderbarkeit, Wiederverwend- + + Wartbarkeit, barkeit Erweiterbarkeit + + + + Modularisierung und Reduzierung der Kopplung + Nachvollziehbarkeit, + Verständlichkeit + + + + Senkung der Entwicklungskosten
5 Motivation Objektorientierung Besitzt Modularisierungs-Mechanismen: Attribute, Operationen, Klassen, Schnittstellen, Pakete, Beziehungen, Komponenten, etc. Gilt heute als Defacto-Standard. Problem Objektorientierung im Allgemeinen und .NET im Speziellen besitzen kein Modulkonzept oberhalb von Paketen. Bestehende Komponentenmodelle (in .NET) adressieren nur eine bestimmte Domäne und sind statisch. Lösung Ein neues Komponentenmodell namens MEF (Managed Extensibility Framework).
6 MEF – Überblick 24/7-Kurzzusammenfassung In sieben Worten MEF definiert ein dynamisches Komponentenmodell für .NET. In 24 Sekunden MEF ist ein Komponentenmodell für .NET, über das Applikationen durch sogenannte Composable Parts dynamisch zusammengestellt werden können. Jedes Composable Part definiert explizit über Kontrakte, welche Dienste für den Betrieb importiert werden müssen und welche Dienste es exportiert. In einem Katalog werden ein oder mehrere Composable Parts zusammengefasst. Die Verbindung zwischen Dienst-Anbietern und Dienst- Konsumenten erfolgt nicht im Programmcode sondern wird über eine Kompositionsbeschreibung innerhalb eines sogenannten Composition Containers geregelt.
7 MEF – Überblick Eigenschaften Besitzt ein Abhängigkeitsmanagement. Berücksichtigt nicht nur die Entwicklungsphase, sondern insbesondere die Laufzeitphase Wie können Komponenten im laufenden Betrieb unter Einhaltung ihrer Abhängigkeiten installiert, aktualisiert oder entfernt werden? Einführung eines serviceorientierten Programmiermodells Komponenten können bereitgestellte Dienste anderer Komponenten nutzen. Bereitstellung und Auffindung wird über die Infrastruktur zur Verfügung gestellt. Lose Kopplung zwischen den Komponenten. Vergleichbare Ansätze OSGi (Java) Google Juice (Java) Unity (.NET) Dependency Injection, Inversion of Control, Hollywood Prinzip
8 MEF – Überblick Konventionelles Modell eines Softwaresystems .NET-Klassen, die durch unterschiedliche Assemblies angeboten werden. Implizite Abhängigkeiten untereinander mit einer starren Kopplung. Zur Compilierungszeit festgelegte Interaktionen zwischen Objekten!
9 MEF – Überblick Vermeidung der starren Kopplung durch das MEF Managed Component1 Extensibility Component2 Framework Import Export Inversion of Control bzw. Dependency Injection Umkehrung der Vorgehensweise, dass das Verhalten zur Compilierungszeit über den Programmcode bestimmt wird. Vielmehr ist ein Container dafür verantwortlich, dass Abhängigkeiten zur Laufzeit aufgelöst und befriedigt werden. Erhoffte Konsequenzen Erhöhung der Wartbarkeit Erhöhung der Erweiterbarkeit Erhöhung der Änderbarkeit
10 «Composable Part» News Reader MEF – Beispiel News Reader «uses» «Composable Part» News Contract «interface» Managed NewsContract Extensibility +GetNews() : string[] Framework «uses» «uses» «Composable Part» «Composable Part» Basic News Science News BasicNews ScienceNews +GetNews() : string[] +GetNews() : string[]
11 MEF – Beispiel Die Schnittstelle NewsContract namespace NewsService { /// /// Definiert die Schnittstelle eines News-Dienstes. /// public interface NewsContract { /// /// Liefert eine Liste von Nachrichten zurück. /// /// string[] GetNews(); } }
12 MEF – Beispiel Die Klasse BasicNews using System.ComponentModel.Composition; namespace BasicNews { /// /// Export einer Klasse, welche NewsContract implementiert. /// [Export(typeof(NewsService.NewsContract))] public class BasicNews : NewsService.NewsContract { public string[] GetNews() { //Quelle: www.spiegel.de am 31.03.2011 13:52Uhr return new string[] { "Republikaner hebeln Obamas Finanzreform aus!", "Esa-Satellit zeichnet das Antlitz der Erde neu!", "Sklaven der Noten!"}; } } }
13 MEF – Beispiel Die Klasse ScienceNews using System.ComponentModel.Composition; namespace ScienceNews { /// /// Export einer Klasse, welche NewsContract implementiert. /// [Export(typeof(NewsService.NewsContract))] public class ScienceNews : NewsService.NewsContract { public string[] GetNews() { //Quelle: www.spiegel.de am 31.03.2011 13:52Uhr return new string[] { "Lärm raubt jährlich eine Million Lebensjahre!", "Farbstoff schützt Würmer vor Alzheimer!", "Schokolade im Namen des Herrn!"}; } } }
14 MEF – Beispiel using System.ComponentModel.Composition; using System.ComponentModel.Composition.Hosting; Die News Reader-Anwendung namespace WindowsFormsApplication1 { public partial class NewsReaderWindow : Form { /// /// Import eines beliebigen NewsContract. Die konkrete /// Implementierung ist nicht von Interesse. /// [Import(typeof(NewsService.NewsContract))] private NewsService.NewsContract news; private void actionClick(object sender, EventArgs e) { var catalog = new AssemblyCatalog(@"..."); var container = new CompositionContainer(catalog); container.ComposeParts(this); } } }
15 MEF - Programmiermodell Vorgehensweise Contracts Schnittstelle (contracts) definieren und nach Möglichkeit in einer oder mehreren Contract Assemblies veröffentlichen. Export Implementierungen durch das [Export]-MetaAttribute veröffentlichen. Import Abhängigkeiten durch explizite Definition durch das [Import]- MetaAttribute veröffentlichen. Compose Einen Composition Container erzeugen und alle Composable Parts bekanntmachen. Anschließend die Anwendungskomposition in Gang setzen.
16 MEF – Beispiel News Reader
17 Fazit Wann sollte MEF eingesetzt werden? Erweiterungskonzept für Applikationen und Frameworks Modell der Erweiterungspunkte Entkopplung von Komponenten Strukturierung von Applikationen Reduzierung der Download-Zeiten bei Silverlight-Anwendungen Reduzierung der Startzeiten bei Anwendungen Transparentes Abhängigkeits-Management
18 Fazit Einschätzung MEF Solides Dependency Injection-Framework Quelloffen Bestandteil von .NET 4 und Silverlight 4 MEF und MAF Beim Managed Add-in Framework liegt der Fokus auf dem Laden und Entladen von Assemblies. Beim MEF liegt der Fokus auf der Erkennbarkeit und Erweiterbarkeit. Sinn und Nutzen des Einsatzes gründlich überprüfen. In Hinblick auf Reifegrad und Praxistauglichkeit ansonsten ist der Einsatz aber empfehlenswert. Vielen Dank!
Inhouse-Schulungen W3L-Akademie Flexibel online lernen und studieren! Wir bieten Inhouse-Schulungen In Zusammenarbeit mit der und Beratung durch unsere Fachhochschule Dortmund IT-Experten und –Berater. bieten wir Schulungsthemen zwei Online-Studiengänge Softwarearchitektur (OOD) B.Sc. Web- und Medieninformatik Requirements Engineering (OOA) B.Sc. Wirtschaftsinformatik Nebenläufige & verteilte Programmierung und 7 Weiterbildungen im Gerne konzipieren wir auch eine individuelle Schulung IT-Bereich an. zu Ihren Fragestellungen. Sprechen Sie uns an! Besuchen Sie unsere Akademie! Tel. 0231/61 804-0, info@W3L.de http://Akademie.W3L.de
Sie können auch lesen