Managed Extensibility Framework - die dynamische Softwareplattform auf .NET-Basis - W3L AG 2011

Die Seite wird erstellt Christopher Bär
 
WEITER LESEN
Managed Extensibility Framework - die dynamische Softwareplattform auf .NET-Basis - W3L AG 2011
1

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

W3L AG
info@W3L.de

2011
Managed Extensibility Framework - die dynamische Softwareplattform auf .NET-Basis - W3L AG 2011
2

Inhalt

  Motivation
  Managed Extensibility Framework (MEF)
     Überblick
     Beispiel
     Programmiermodell
     Framework
  Fazit

                                          zurück
Managed Extensibility Framework - die dynamische Softwareplattform auf .NET-Basis - W3L AG 2011
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
Managed Extensibility Framework - die dynamische Softwareplattform auf .NET-Basis - W3L AG 2011
4

   Motivation

Änderbarkeit,                                               Wiederverwend-
                  +                                     +
Wartbarkeit,                                                barkeit
Erweiterbarkeit   +                                     +
             +                                                       +

                             Modularisierung und
                             Reduzierung der
                             Kopplung

                                        +
                             Nachvollziehbarkeit,
                         +   Verständlichkeit       +

    +                                   +                                    +
                      Senkung der Entwicklungskosten
Managed Extensibility Framework - die dynamische Softwareplattform auf .NET-Basis - W3L AG 2011
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