Applikationsentwicklung mit dem Microkernel von Andreas Bräsen.NET User Group Karlsruhe...

Post on 05-Apr-2015

105 views 0 download

Transcript of Applikationsentwicklung mit dem Microkernel von Andreas Bräsen.NET User Group Karlsruhe...

Applikationsentwicklung Applikationsentwicklung mit dem Microkernelmit dem Microkernel

von Andreas Bräsenvon Andreas Bräsen

.NET User Group Karlsruhe.NET User Group Karlsruhe

23-Feb-200623-Feb-2006

Ziel des VortragesZiel des Vortrages

Relativ kurz zu beschreiben, wie ich von Relativ kurz zu beschreiben, wie ich von der Anforderung an eine zu der Anforderung an eine zu implementierende Applikation zur implementierende Applikation zur Benutzung des Microkernels gekommen Benutzung des Microkernels gekommen bin.bin.

Zu meiner Person...Zu meiner Person...

Andreas BräsenAndreas Bräsen

Dipl. Ing. der technischen Informatik (FH)Dipl. Ing. der technischen Informatik (FH)

Freiberuflicher Software Entwickler mit Freiberuflicher Software Entwickler mit Schwerpunkt auf .NET basierter Software Schwerpunkt auf .NET basierter Software EntwicklungEntwicklung

Beschäftigung mit dem Microkernel seit Beschäftigung mit dem Microkernel seit dem September 2005dem September 2005

Die Applikation...Die Applikation...

Es soll eine Software erstellt werden, Es soll eine Software erstellt werden, welche Homöopatische Heilmittel ermittelt, welche Homöopatische Heilmittel ermittelt, basierend auf einen Frage/Antwort basierend auf einen Frage/Antwort Verfahren. Diese Application soll auf Verfahren. Diese Application soll auf verschiedenen Endgeräten und mit verschiedenen Endgeräten und mit verschiedenen Datenbanken laufen.verschiedenen Datenbanken laufen.

Die Anforderungen ein wenig Die Anforderungen ein wenig genauer...genauer...

1.1. Die Applikation muß unter .NET laufen.Die Applikation muß unter .NET laufen.

2.2. Die Applikation muß unter Windows laufen.Die Applikation muß unter Windows laufen.

3.3. Die Applikation muß auf einem PDA laufen.Die Applikation muß auf einem PDA laufen.

4.4. Als Datenbank muß SQL-Server, SQL-Server Als Datenbank muß SQL-Server, SQL-Server CE und Access unterstützt werden.CE und Access unterstützt werden.

5.5. Der verwendete Algorithmus zum Finden der Der verwendete Algorithmus zum Finden der Heilmittel muß austauschbar sein.Heilmittel muß austauschbar sein.

6.6. Parallele Entwicklung aller Komponenten.Parallele Entwicklung aller Komponenten.

7.7. Hohe Testabdeckung (Regression Tests).Hohe Testabdeckung (Regression Tests).

Hmm, wie könnte man das Problem Hmm, wie könnte man das Problem lösen ?lösen ?

Das Schichtenmodell - Eine Lösung ?Das Schichtenmodell - Eine Lösung ?

Nicht so richtig !Nicht so richtig !

1.1. Die Applikation muß unter .NET laufen.Die Applikation muß unter .NET laufen.

2.2. Die Applikation muß unter Windows laufen.Die Applikation muß unter Windows laufen.

3.3. Die Applikation muß auf einem PDA laufen.Die Applikation muß auf einem PDA laufen.

4.4. Als Datenbank muß SQL-Server, SQL-Server Als Datenbank muß SQL-Server, SQL-Server CE und Access unterstützt werden.CE und Access unterstützt werden.

5.5. Der verwendete Algorithmus muß Der verwendete Algorithmus muß austauschbar sein.austauschbar sein.

6.6. Parallele Entwicklung aller Komponenten.Parallele Entwicklung aller Komponenten.

7.7. Hohe Testabdeckung (Regression Tests).Hohe Testabdeckung (Regression Tests).

Das Schichtenmodell – Die Zweite..Das Schichtenmodell – Die Zweite..

Die Anforderungen...Die Anforderungen...

1.1. Die Applikation muß unter .NET laufen.Die Applikation muß unter .NET laufen.

2.2. Die Applikation muß unter Windows laufen.Die Applikation muß unter Windows laufen.

3.3. Die Applikation muß auf einem PDA laufen.Die Applikation muß auf einem PDA laufen.

4.4. Als Datenbank muß SQL-Server, SQL-Server Als Datenbank muß SQL-Server, SQL-Server CE und Access unterstützt werden.CE und Access unterstützt werden.

5.5. Der verwendete Algorithmus muß Der verwendete Algorithmus muß austauschbar sein.austauschbar sein.

6.6. Parallele Entwicklung aller Komponenten.Parallele Entwicklung aller Komponenten.

7.7. Hohe Testabdeckung (Regression Tests).Hohe Testabdeckung (Regression Tests).

Das Schichtenmodell – Die Fragen...Das Schichtenmodell – Die Fragen...

Wer instanziert wen ?Wer instanziert wen ?Wer steckt das Ganze zusammen ?Wer steckt das Ganze zusammen ?Muß ich die Interfaces durch Schichten Muß ich die Interfaces durch Schichten durchreichen ?durchreichen ?Wie tausche ich Schichten/Bestandteile aus, Wie tausche ich Schichten/Bestandteile aus, so daß ich das Ganze testen kann ?so daß ich das Ganze testen kann ?Wie entwickle ich parallel ?Wie entwickle ich parallel ?Wann definiere ich die Interfaces ?Wann definiere ich die Interfaces ?Wie kann ich Bestandteile einfach Wie kann ich Bestandteile einfach austauschen ?austauschen ?

Basta September 2005Basta September 2005

Ralf WestphalRalf WestphalPragmatische AnwendungsarchitekturPragmatische Anwendungsarchitektur Zellen statt SchichtenZellen statt Schichten

Dort erwähnte er den MicrokernelDort erwähnte er den Microkernel Ein Microkernel lokalisiert und instanziert Ein Microkernel lokalisiert und instanziert

Komponenten.Komponenten.

In seinem Vortrag sprach er von Zellen, die von In seinem Vortrag sprach er von Zellen, die von einander nur die Schnittstellen kennen und die einander nur die Schnittstellen kennen und die über einen Microkernel zusammengesteckt über einen Microkernel zusammengesteckt werden können.werden können.

Wie sieht so eine Zelle aus ?Wie sieht so eine Zelle aus ?

Resource AdapterApplication Adapter

User Portal

CoreApplication Portal

BegriffserklärungBegriffserklärung

Core – Logik der Zelle (Verarbeitung)Core – Logik der Zelle (Verarbeitung)

Portal – API steuert die Logik.Portal – API steuert die Logik.

Adapter – Die Logik steuert ein API.Adapter – Die Logik steuert ein API.

Zelle = Komponente ?Zelle = Komponente ?

Zellen (Komponenten) werden Zellen (Komponenten) werden zusammengesteckt zusammengesteckt

GUI

Business

Data Access

Data TypesUtilities

Zellen...(SOA läßt grüßen)Zellen...(SOA läßt grüßen)

Grenzen zwischen Zellen (Komponenten) Grenzen zwischen Zellen (Komponenten) sind explizit.sind explizit.

Zellen (Komponenten) sind möglichst in Zellen (Komponenten) sind möglichst in sich geschlossen.sich geschlossen.

Zellen (Komponenten) kennen Zellen (Komponenten) kennen voneinander nur ihre Verträge, nicht aber voneinander nur ihre Verträge, nicht aber ihre Implementierungen.ihre Implementierungen.

SOA = Service Oriented Architecture

Zellen (Komponenten) werden Zellen (Komponenten) werden zusammengesteckt zusammengesteckt

GUI

Business

Data Access

Data TypesUtilities

Das Schichtenmodell – Die Zweite..Das Schichtenmodell – Die Zweite..

Ich Glaube mir fehlt noch etwas..Ich Glaube mir fehlt noch etwas..

Wenn Zellen (Komponenten) nur die Wenn Zellen (Komponenten) nur die Interfaces der anderen Zellen Interfaces der anderen Zellen (Komponenten) kennen, wie kann ich den (Komponenten) kennen, wie kann ich den überhaupt jemals eine Instanz einer überhaupt jemals eine Instanz einer anderen Zelle bekommen bzw, wie füge anderen Zelle bekommen bzw, wie füge ich das alles zusammen ? Wo ist der ich das alles zusammen ? Wo ist der Anfang ? Wo ist das Main ?Anfang ? Wo ist das Main ?

Jetzt kommt der Microkernel ins Jetzt kommt der Microkernel ins Spiel ! Spiel !

Der Microkernel weiß zu welchem welche Der Microkernel weiß zu welchem welche Klasse welches Interface implementiert.Klasse welches Interface implementiert.Das weiß er über eine Konfiguration (z.B. Das weiß er über eine Konfiguration (z.B. aus der App Config)aus der App Config)Wenn man jetzt eine Instanz eines Wenn man jetzt eine Instanz eines Interfaces benötigt, dann fragt man Interfaces benötigt, dann fragt man einfach nur den Microkernel und man einfach nur den Microkernel und man bekommt eine Instanz zu dem geforderten bekommt eine Instanz zu dem geforderten Interface.Interface.

Das Schichtenmodell – Die Fragen...Das Schichtenmodell – Die Fragen...

Wer instanziert wen ?Wer instanziert wen ?Wer steckt das Ganze zusammen ?Wer steckt das Ganze zusammen ?Muß ich die Interfaces durch Schichten Muß ich die Interfaces durch Schichten durchreichen ?durchreichen ?Wie tausche ich Schichten/Bestandteile aus, Wie tausche ich Schichten/Bestandteile aus, so daß ich das Ganze testen kann ?so daß ich das Ganze testen kann ?Wie entwickle ich parallel ?Wie entwickle ich parallel ?Wann definiere ich die Interfaces ?Wann definiere ich die Interfaces ?Wie kann ich Bestandteile einfach Wie kann ich Bestandteile einfach austauschen ?austauschen ?

Die Lösung reppelte sich von ganz Die Lösung reppelte sich von ganz alleine auf:alleine auf:

Wer instanziert wen ?Wer instanziert wen ? Ok, es muß immer noch einen Host Ok, es muß immer noch einen Host

geben mit einem Main, dieser holt sich geben mit einem Main, dieser holt sich über den Microkernel die Business über den Microkernel die Business Logik Komponente und startet diese. Logik Komponente und startet diese. Die Business Logik benötigt ein Portal Die Business Logik benötigt ein Portal und mehrere Adapter. Diese werden und mehrere Adapter. Diese werden ebenfalls über den Microkernel ebenfalls über den Microkernel instanziert und so fort. So baut sich die instanziert und so fort. So baut sich die Application auf und alles ohne new*.Application auf und alles ohne new*.

*Nur standard Datentypen werden mit new erzeugt. DataSets gehören auch dazu.

Weitere Antworten...Weitere Antworten...

Wer steckt das Ganze zusammen ?Wer steckt das Ganze zusammen ? Die Application selber fängt an sich Die Application selber fängt an sich

zusammenzubauen.zusammenzubauen.

Muß ich die Interfaces durch Muß ich die Interfaces durch Schichten durchreichen ?Schichten durchreichen ? Nein, über den Microkernel komme ich Nein, über den Microkernel komme ich

immer an Instanz eines Interfaces immer an Instanz eines Interfaces heran.heran.

Weitere AntwortenWeitere Antworten

Wie tausche ich Wie tausche ich Schichten/Bestandteile aus, so daß Schichten/Bestandteile aus, so daß ich das Ganze testen kann ?ich das Ganze testen kann ? Ich kann anstatt der realen Ich kann anstatt der realen

Implementierung mir Instanzen über Implementierung mir Instanzen über den Microkernel geben lassen, die das den Microkernel geben lassen, die das geforderte Interface implementieren, geforderte Interface implementieren, aber nur zu Testzwecken da sind. aber nur zu Testzwecken da sind.

Weitere Antworten...Weitere Antworten...

Wie entwickle ich parallel ?Wie entwickle ich parallel ? Wenn man jetzt noch den Contract Wenn man jetzt noch den Contract

First Design Ansatz fährt, sich also First Design Ansatz fährt, sich also über die Schnittstellen vor der über die Schnittstellen vor der Implementierung Gedanken macht, Implementierung Gedanken macht, dann können Entwickler dann können Entwickler unabhängig gegen die jeweiligen unabhängig gegen die jeweiligen Interfaces entwickeln. Interfaces entwickeln.

Weitere Antworten...Weitere Antworten...

Wann definiere ich die Interfaces ?Wann definiere ich die Interfaces ? Die Frage ist schon durch das Contract Die Frage ist schon durch das Contract

First Design beantwortet worden. Zuerst First Design beantwortet worden. Zuerst das Interface, dann die Implemetierung.das Interface, dann die Implemetierung.

Wie kann ich Bestandteile einfach Wie kann ich Bestandteile einfach austauschen ?austauschen ? Der Microkernel hat ein konfigurierbares Der Microkernel hat ein konfigurierbares

Mapping zwischen Interface(s) und Mapping zwischen Interface(s) und implementierender Klasse, die on the fly implementierender Klasse, die on the fly ausgetauscht werden kann.ausgetauscht werden kann.

App-Config 1/2App-Config 1/2<configuration><configuration> <configSections><configSections> <section name=„microkernel“ <section name=„microkernel“ type=„dnp.microkernel.ConfigSectionHandler, dnp.microkernel“ />type=„dnp.microkernel.ConfigSectionHandler, dnp.microkernel“ /> </configSections></configSections> ...... <microkernel><microkernel> <references><references> <local keyType=„<local keyType=„MyInterfaces.IBerichtswesenMyInterfaces.IBerichtswesen““ assembly=„assembly=„MyImplementationMyImplementation““ implementationType=„implementationType=„MyImplementation.BerichtswesenEinfachMyImplementation.BerichtswesenEinfach“>“> </local></local> ...... </references></references> </microkernel></microkernel></configuration></configuration>

App Config 2/2App Config 2/2......<microkernel><microkernel> <references><references> <local keyType=„MyInterfaces.IBerichtswesen“<local keyType=„MyInterfaces.IBerichtswesen“ assembly=„MyImplementation“assembly=„MyImplementation“ implementationType=„implementationType=„MyImplementation.BerichtswesenEinfachMyImplementation.BerichtswesenEinfach“>“> <roleAllowed><roleAllowed> <role name=„<role name=„Abteilungsserver\SachbearbeiterAbteilungsserver\Sachbearbeiter“ />“ /> </roleAllowed></roleAllowed> </local></local> <local keyType=„MyInterfaces.IBerichtswesen“<local keyType=„MyInterfaces.IBerichtswesen“ assembly=„MyImplementation“assembly=„MyImplementation“ implementationType=„implementationType=„MyImplementation.BerichtswesenDetailiertMyImplementation.BerichtswesenDetailiert“>“> <roleAllowed><roleAllowed> <role name=„<role name=„Abteilungsserver\AbteilungsleiterAbteilungsserver\Abteilungsleiter“ />“ /> </roleAllowed></roleAllowed> </local></local> </references></references> </microkernel></microkernel></configuration></configuration>

Benutzung des MicrokernelsBenutzung des Microkernels

HerkömmlichHerkömmlich IClass1 _class;IClass1 _class; _class = new Class1() as IClass1;_class = new Class1() as IClass1;

Mit MicrokernelMit Microkernel IClass1 _class1;IClass1 _class1; _class = dnp.microkernel.ObjectFactory_class = dnp.microkernel.ObjectFactory

.CreateInstance( typeof( IClass1 ) ) .CreateInstance( typeof( IClass1 ) ) as IClass1; as IClass1;

Die Anforderungen...Die Anforderungen...

1.1. Die Applikation muß unter .NET laufen.Die Applikation muß unter .NET laufen.

2.2. Die Applikation muß unter Windows laufen.Die Applikation muß unter Windows laufen.

3.3. Die Applikation muß auf einem PDA laufen.Die Applikation muß auf einem PDA laufen.

4.4. Als Datenbank muß SQL-Server, SQL-Server Als Datenbank muß SQL-Server, SQL-Server CE und Access unterstützt werden.CE und Access unterstützt werden.

5.5. Der verwendete Algorithmus muß Der verwendete Algorithmus muß austauschbar sein.austauschbar sein.

6.6. Parallele Entwicklung aller Komponenten.Parallele Entwicklung aller Komponenten.

7.7. Hohe Testabdeckung (Regression Tests).Hohe Testabdeckung (Regression Tests).

Ist das alles ?Ist das alles ?

Nein, mann kann das soweit treiben, daß jede Klasse ein Nein, mann kann das soweit treiben, daß jede Klasse ein Interface bekommt.Interface bekommt.Dadurch kann jede Klasse durch Testklassen Dadurch kann jede Klasse durch Testklassen ausgetauscht werden und die Applikation kann zu einem ausgetauscht werden und die Applikation kann zu einem hohen Maße testbar gemacht werden.hohen Maße testbar gemacht werden.Der Microkernel kann Singletons verwalten, was auch zu Der Microkernel kann Singletons verwalten, was auch zu einer besseren Testbarkeit führt, da der Feind des einer besseren Testbarkeit führt, da der Feind des Regression Tests an einer Stelle die Existenz entzogen Regression Tests an einer Stelle die Existenz entzogen werden kann.werden kann.Über den Microkernel können auch Objekte geliefert Über den Microkernel können auch Objekte geliefert werden, die sich in einem anderen Prozess oder werden, die sich in einem anderen Prozess oder Rechner befinden. Der Anfordernde weiß nichts davon.Rechner befinden. Der Anfordernde weiß nichts davon.

Wo Licht ist, ist auch Schatten !Wo Licht ist, ist auch Schatten !

Ein Nachteil ist eventuell die etwas Ein Nachteil ist eventuell die etwas längere Zeit bei der Instanzierung der längere Zeit bei der Instanzierung der Klassen, weil für das angeforderte Klassen, weil für das angeforderte Interface erst in der Mapping Tabelle die Interface erst in der Mapping Tabelle die implementierende Klasse gesucht werden implementierende Klasse gesucht werden muß. Diese wird dann über Reflection muß. Diese wird dann über Reflection instanziert. instanziert.

Die Projektstruktur ändert sich.Die Projektstruktur ändert sich.

Mögliche Projekt-StrukturenMögliche Projekt-Strukturen

Interfaces

GUI

Business

Data Access

Utilties

Microkernel

Host

Data Types

Mögliche Projekt-StrukturenMögliche Projekt-Strukturen

Es gibt ein oder mehrere Assemblies, Es gibt ein oder mehrere Assemblies, welche die Interfaces beinhaltet.welche die Interfaces beinhaltet.

Die anderen Projekte referenzieren diese Die anderen Projekte referenzieren diese Interface-Assemblies und sonst kein Interface-Assemblies und sonst kein anderes Assembly von den Projekten. anderes Assembly von den Projekten. Dadurch wird auch deutlich, das eine Dadurch wird auch deutlich, das eine keine Kopplung zwischen den einzelnen keine Kopplung zwischen den einzelnen Bestandteilen vorliegt.Bestandteilen vorliegt.

Zur entwickelten ApplicationZur entwickelten Application

Demo der ApplicationDemo der Application

Resüme...Resüme...

Der Microkernel bringt mehr Vorteile als Der Microkernel bringt mehr Vorteile als alles andere womit ich bisher Software alles andere womit ich bisher Software entwickelt habe. entwickelt habe. Es bedarf zwar ein wenig der Gewöhnung Es bedarf zwar ein wenig der Gewöhnung an die veränderte Denk- und Arbeitsweise, an die veränderte Denk- und Arbeitsweise, aber das Resultat ist bemerkenswert.aber das Resultat ist bemerkenswert.Der nächste Evolutionsschritt in der Der nächste Evolutionsschritt in der Entwicklung von Software nach dem Entwicklung von Software nach dem Schichtenmodell .....?Schichtenmodell .....?

Resourcen 1/2Resourcen 1/2

1.1. Die Evolution von Mehrschichtarchitekturen -ViDie Evolution von Mehrschichtarchitekturen -Virtuos und flexibel – Torsten Zimmermann - dotrtuos und flexibel – Torsten Zimmermann - dotnetpro 4-2005netpro 4-2005

2.2. Contract First Design und Microkernel-FramewContract First Design und Microkernel-Framework – Am Anfang war der Vertrag – Ralp Westpork – Am Anfang war der Vertrag – Ralp Westphal - dotnetpro 6-2005hal - dotnetpro 6-2005

3.3. Contract First Design und Microkernel-FramewContract First Design und Microkernel-Framework – Spicken nicht erlaubt – Ralf Westphal - dork – Spicken nicht erlaubt – Ralf Westphal - dotnetpro 9-2005otnetpro 9-2005

Resourcen 2/2Resourcen 2/2

4.4. Software einfacher entwickeln – Das Software Software einfacher entwickeln – Das Software Universum – Ralf Westphal – dotnetpro 2-2006Universum – Ralf Westphal – dotnetpro 2-2006

5.5. Software strukturieren mit SoftwarezellenKeine Software strukturieren mit SoftwarezellenKeine Frage der Schichten – Ralf Westphal – dotnetpFrage der Schichten – Ralf Westphal – dotnetpro 3-2006ro 3-2006

6.6. Dot Net TV Folge 10 – MicrokernelDot Net TV Folge 10 – Microkernel

7.7. Basta 2005 – Slideset Pragmatische AnwenduBasta 2005 – Slideset Pragmatische Anwendungsarchitektur – Zellen statt Schichtenngsarchitektur – Zellen statt Schichten

Fragen ...Fragen ...

KontaktKontakt

www.bruke.dewww.bruke.de

Andreas BräsenAndreas Bräsen

Software EntwicklungSoftware Entwicklung

E-Mail: E-Mail: abraesen@bruke.deabraesen@bruke.de

Tel. 07243-765158Tel. 07243-765158