Dynamische Mathematik Dynamische Mathematik Lehren und Lernen mit Dynamische Mathematik Kompaktkurs.
Managed Extensibility Framework – die dynamische ... · dynamische Softwareplattform auf...
Transcript of Managed Extensibility Framework – die dynamische ... · dynamische Softwareplattform auf...
1
Managed Extensibility Framework – die dynamische Softwareplattform auf .NET-Basis
2011
2
Inhalt
MotivationManaged Extensibility Framework (MEF)
ÜberblickBeispielProgrammiermodellFramework
Fazit
zurück
3
Motivation
Zwickmühle der Software-TechnikSoftware-Technik erarbeitet immer bessere Abstraktionsmechanismen...Komplexität von Software nimmt immer weiter zu.
Kurze ProduktzyklenHöhere AnforderungenCustomizing
ModularisierungAltes »Hausmittel« der Software-TechnikPrinzip der Trennung der Belange und ihrer Lokalisierung (principal ofseparation of concerns)Pioniere dieses Konzepts
Edsger DijkstraDavid ParnasNiklaus Wirth
4
Motivation
Senkung der Entwicklungskosten
Modularisierung und Reduzierung der Kopplung
Änderbarkeit, Wartbarkeit, Erweiterbarkeit +
Wiederverwend-barkeit
+
Nachvollziehbarkeit,Verständlichkeit
+
+
+ +
+
+ +
+ ++
5
Motivation
ObjektorientierungBesitzt 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ösungEin neues Komponentenmodell namens MEF (Managed ExtensibilityFramework).
6
MEF – Überblick
24/7-KurzzusammenfassungIn 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
EigenschaftenBesitzt 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 ProgrammiermodellsKomponenten 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ätzeOSGi (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
Inversion of Control bzw. Dependency InjectionUmkehrung 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 KonsequenzenErhöhung der WartbarkeitErhöhung der ErweiterbarkeitErhöhung der Änderbarkeit
ImportComponent1
Import
Component2Export
ManagedExtensibilityFramework
10
MEF – Beispiel
News Reader
«interface»NewsContract
«Composable Part»News Contract
+GetNews() : string[]
BasicNews
«Composable Part»Basic News
+GetNews() : string[]ScienceNews
«Composable Part»Science News
+GetNews() : string[]
«Composable Part»News Reader
«uses»
«uses»
«uses»
ManagedExtensibilityFramework
11
MEF – Beispiel
Die Schnittstelle NewsContractnamespace NewsService{
/// <summary>/// Definiert die Schnittstelle eines News-Dienstes./// </summary>public interface NewsContract{
/// <summary>/// Liefert eine Liste von Nachrichten zurück./// </summary>/// <returns></returns>string[] GetNews();
}}
12
MEF – Beispiel
Die Klasse BasicNewsusing System.ComponentModel.Composition;namespace BasicNews{
/// <summary>/// Export einer Klasse, welche NewsContract implementiert./// </summary>[Export(typeof(NewsService.NewsContract))]public class BasicNews : NewsService.NewsContract{
public string[] GetNews(){
//Quelle: www.spiegel.de am 31.03.2011 13:52Uhrreturn new string[] { "Republikaner hebeln Obamas Finanzreform aus!", "Esa-Satellit zeichnet das Antlitz der Erde neu!", "Sklaven der Noten!"};
}}
}
13
MEF – Beispiel
Die Klasse ScienceNewsusing System.ComponentModel.Composition;namespace ScienceNews{
/// <summary>/// Export einer Klasse, welche NewsContract implementiert./// </summary>[Export(typeof(NewsService.NewsContract))]public class ScienceNews : NewsService.NewsContract{
public string[] GetNews(){
//Quelle: www.spiegel.de am 31.03.2011 13:52Uhrreturn 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
Die News Reader-Anwendung
using System.ComponentModel.Composition;using System.ComponentModel.Composition.Hosting;
namespace WindowsFormsApplication1{
public partial class NewsReaderWindow : Form{
/// <summary>/// Import eines beliebigen NewsContract. Die konkrete /// Implementierung ist nicht von Interesse./// </summary>[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
VorgehensweiseContracts
Schnittstelle (contracts) definieren und nach Möglichkeit in einer oder mehreren Contract Assemblies veröffentlichen.
ExportImplementierungen durch das [Export]-MetaAttribute veröffentlichen.
ImportAbhängigkeiten durch explizite Definition durch das [Import]-MetaAttribute veröffentlichen.
ComposeEinen Composition Container erzeugen und alle Composable Parts bekanntmachen. Anschließend die Anwendungskomposition in Gang setzen.
17
Fazit
Wann sollte MEF eingesetzt werden?Erweiterungskonzept für Applikationen und Frameworks
Modell der Erweiterungspunkte
Entkopplung von Komponenten
Strukturierung von ApplikationenReduzierung der Download-Zeiten bei Silverlight-AnwendungenReduzierung der Startzeiten bei Anwendungen
Transparentes Abhängigkeits-Management
18
Fazit
Einschätzung MEFSolides Dependency Injection-FrameworkQuelloffenBestandteil von .NET 4 und Silverlight 4MEF 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!
In Zusammenarbeit mit der Fachhochschule Dortmund bieten wir
zwei Online-Studiengänge B.Sc. Web- und MedieninformatikB.Sc. Wirtschaftsinformatik
und 7 Weiterbildungen im IT-Bereich an.
W3L-AkademieInhouse-Schulungen
Wir bieten Inhouse-Schulungen und Beratung durch unsere IT-Experten und –Berater.
SchulungsthemenSoftwarearchitektur (OOD)
Requirements Engineering (OOA)
Nebenläufige & verteilte
Programmierung
Gerne konzipieren wir auch eine individuelle Schulung zu Ihren Fragestellungen.
Flexibel online lernen und studieren!
Sprechen Sie uns an!Tel. 0231/61 804-0, [email protected]
Besuchen Sie unsere Akademie!http://Akademie.W3L.de