Managed Extensibility Framework – die dynamische ... · dynamische Softwareplattform auf...

19
1 Managed Extensibility Framework – die dynamische Softwareplattform auf .NET-Basis W3L AG [email protected] 2011

Transcript of Managed Extensibility Framework – die dynamische ... · dynamische Softwareplattform auf...

1

Managed Extensibility Framework – die dynamische Softwareplattform auf .NET-Basis

W3L [email protected]

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.

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 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