Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Applikationsentwicklung mit dem Microkernel von Andreas Bräsen.NET User Group Karlsruhe 23-Feb-2006.

Ähnliche Präsentationen


Präsentation zum Thema: "Applikationsentwicklung mit dem Microkernel von Andreas Bräsen.NET User Group Karlsruhe 23-Feb-2006."—  Präsentation transkript:

1 Applikationsentwicklung mit dem Microkernel von Andreas Bräsen.NET User Group Karlsruhe 23-Feb-2006

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

3 Zu meiner Person... Andreas Bräsen Dipl. Ing. der technischen Informatik (FH) Freiberuflicher Software Entwickler mit Schwerpunkt auf.NET basierter Software Entwicklung Beschäftigung mit dem Microkernel seit dem September 2005

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

5 Die Anforderungen ein wenig genauer... 1.Die Applikation muß unter.NET laufen. 2.Die Applikation muß unter Windows laufen. 3.Die Applikation muß auf einem PDA laufen. 4.Als Datenbank muß SQL-Server, SQL-Server CE und Access unterstützt werden. 5.Der verwendete Algorithmus zum Finden der Heilmittel muß austauschbar sein. 6.Parallele Entwicklung aller Komponenten. 7.Hohe Testabdeckung (Regression Tests).

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

7 Das Schichtenmodell - Eine Lösung ?

8 Nicht so richtig ! 1.Die Applikation muß unter.NET laufen. 2.Die Applikation muß unter Windows laufen. 3.Die Applikation muß auf einem PDA laufen. 4.Als Datenbank muß SQL-Server, SQL-Server CE und Access unterstützt werden. 5.Der verwendete Algorithmus muß austauschbar sein. 6.Parallele Entwicklung aller Komponenten. 7.Hohe Testabdeckung (Regression Tests).

9 Das Schichtenmodell – Die Zweite..

10 Die Anforderungen... 1.Die Applikation muß unter.NET laufen. 2.Die Applikation muß unter Windows laufen. 3.Die Applikation muß auf einem PDA laufen. 4.Als Datenbank muß SQL-Server, SQL-Server CE und Access unterstützt werden. 5.Der verwendete Algorithmus muß austauschbar sein. 6.Parallele Entwicklung aller Komponenten. 7.Hohe Testabdeckung (Regression Tests).

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

12 Basta September 2005 Ralf Westphal Pragmatische Anwendungsarchitektur Zellen statt Schichten Zellen statt Schichten Dort erwähnte er den Microkernel Ein Microkernel lokalisiert und instanziert Komponenten. Ein Microkernel lokalisiert und instanziert Komponenten. In seinem Vortrag sprach er von Zellen, die von einander nur die Schnittstellen kennen und die über einen Microkernel zusammengesteckt werden können.

13 Wie sieht so eine Zelle aus ? Resource Adapter Application Adapter User Portal Core Application Portal

14 Begriffserklärung Core – Logik der Zelle (Verarbeitung) Portal – API steuert die Logik. Adapter – Die Logik steuert ein API. Zelle = Komponente ?

15 Zellen (Komponenten) werden zusammengesteckt GUI Business Data Access Data Types Utilities

16 Zellen...(SOA läßt grüßen) Grenzen zwischen Zellen (Komponenten) sind explizit. Zellen (Komponenten) sind möglichst in sich geschlossen. Zellen (Komponenten) kennen voneinander nur ihre Verträge, nicht aber ihre Implementierungen. SOA = Service Oriented Architecture

17 Zellen (Komponenten) werden zusammengesteckt GUI Business Data Access Data Types Utilities

18 Das Schichtenmodell – Die Zweite..

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

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

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

22 Die Lösung reppelte sich von ganz alleine auf: Wer instanziert wen ? Ok, es muß immer noch einen Host geben mit einem Main, dieser holt sich über den Microkernel die Business Logik Komponente und startet diese. Die Business Logik benötigt ein Portal und mehrere Adapter. Diese werden ebenfalls über den Microkernel instanziert und so fort. So baut sich die Application auf und alles ohne new*. Ok, es muß immer noch einen Host geben mit einem Main, dieser holt sich über den Microkernel die Business Logik Komponente und startet diese. Die Business Logik benötigt ein Portal und mehrere Adapter. Diese werden ebenfalls über den Microkernel instanziert und so fort. So baut sich die Application auf und alles ohne new*. *Nur standard Datentypen werden mit new erzeugt. DataSets gehören auch dazu.

23 Weitere Antworten... Wer steckt das Ganze zusammen ? Die Application selber fängt an sich zusammenzubauen. Die Application selber fängt an sich zusammenzubauen. Muß ich die Interfaces durch Schichten durchreichen ? Nein, über den Microkernel komme ich immer an Instanz eines Interfaces heran. Nein, über den Microkernel komme ich immer an Instanz eines Interfaces heran.

24 Weitere Antworten Wie tausche ich Schichten/Bestandteile aus, so daß ich das Ganze testen kann ? Ich kann anstatt der realen Implementierung mir Instanzen über den Microkernel geben lassen, die das geforderte Interface implementieren, aber nur zu Testzwecken da sind. Ich kann anstatt der realen Implementierung mir Instanzen über den Microkernel geben lassen, die das geforderte Interface implementieren, aber nur zu Testzwecken da sind.

25 Weitere Antworten... Wie entwickle ich parallel ? Wenn man jetzt noch den Contract First Design Ansatz fährt, sich also über die Schnittstellen vor der Implementierung Gedanken macht, dann können Entwickler unabhängig gegen die jeweiligen Interfaces entwickeln. Wenn man jetzt noch den Contract First Design Ansatz fährt, sich also über die Schnittstellen vor der Implementierung Gedanken macht, dann können Entwickler unabhängig gegen die jeweiligen Interfaces entwickeln.

26 Weitere Antworten... Wann definiere ich die Interfaces ? Die Frage ist schon durch das Contract First Design beantwortet worden. Zuerst das Interface, dann die Implemetierung. Die Frage ist schon durch das Contract First Design beantwortet worden. Zuerst das Interface, dann die Implemetierung. Wie kann ich Bestandteile einfach austauschen ? Der Microkernel hat ein konfigurierbares Mapping zwischen Interface(s) und implementierender Klasse, die on the fly ausgetauscht werden kann. Der Microkernel hat ein konfigurierbares Mapping zwischen Interface(s) und implementierender Klasse, die on the fly ausgetauscht werden kann.

27 App-Config 1/2 <configuration> <section name=microkernel <section name=microkernel type=dnp.microkernel.ConfigSectionHandler, dnp.microkernel /> type=dnp.microkernel.ConfigSectionHandler, dnp.microkernel />...... <local keyType=MyInterfaces.IBerichtswesen <local keyType=MyInterfaces.IBerichtswesen assembly=MyImplementation assembly=MyImplementation implementationType=MyImplementation.BerichtswesenEinfach> implementationType=MyImplementation.BerichtswesenEinfach>...... </configuration>

28 App Config 2/2...<microkernel> <local keyType=MyInterfaces.IBerichtswesen <local keyType=MyInterfaces.IBerichtswesen assembly=MyImplementation assembly=MyImplementation implementationType=MyImplementation.BerichtswesenEinfach> implementationType=MyImplementation.BerichtswesenEinfach> <local keyType=MyInterfaces.IBerichtswesen <local keyType=MyInterfaces.IBerichtswesen assembly=MyImplementation assembly=MyImplementation implementationType=MyImplementation.BerichtswesenDetailiert> implementationType=MyImplementation.BerichtswesenDetailiert> </configuration>

29 Benutzung des Microkernels Herkömmlich IClass1 _class; IClass1 _class; _class = new Class1() as IClass1; _class = new Class1() as IClass1; Mit Microkernel IClass1 _class1; IClass1 _class1; _class = dnp.microkernel.ObjectFactory.CreateInstance( typeof( IClass1 ) ) as IClass1; _class = dnp.microkernel.ObjectFactory.CreateInstance( typeof( IClass1 ) ) as IClass1;

30 Die Anforderungen... 1.Die Applikation muß unter.NET laufen. 2.Die Applikation muß unter Windows laufen. 3.Die Applikation muß auf einem PDA laufen. 4.Als Datenbank muß SQL-Server, SQL-Server CE und Access unterstützt werden. 5.Der verwendete Algorithmus muß austauschbar sein. 6.Parallele Entwicklung aller Komponenten. 7.Hohe Testabdeckung (Regression Tests).

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

32 Wo Licht ist, ist auch Schatten ! Ein Nachteil ist eventuell die etwas längere Zeit bei der Instanzierung der Klassen, weil für das angeforderte Interface erst in der Mapping Tabelle die implementierende Klasse gesucht werden muß. Diese wird dann über Reflection instanziert. Die Projektstruktur ändert sich.

33 Mögliche Projekt-Strukturen Interfaces GUI Business Data Access Utilties Microkernel Host Data Types

34 Mögliche Projekt-Strukturen Es gibt ein oder mehrere Assemblies, welche die Interfaces beinhaltet. Die anderen Projekte referenzieren diese Interface-Assemblies und sonst kein anderes Assembly von den Projekten. Dadurch wird auch deutlich, das eine keine Kopplung zwischen den einzelnen Bestandteilen vorliegt.

35 Zur entwickelten Application

36 Demo der Application

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

38 Resourcen 1/2 1.Die Evolution von Mehrschichtarchitekturen - Virtuos und flexibel – Torsten Zimmermann - dotnetpro 4-2005 Die Evolution von Mehrschichtarchitekturen - Virtuos und flexibel – Torsten Zimmermann - dotnetpro 4-2005Die Evolution von Mehrschichtarchitekturen - Virtuos und flexibel – Torsten Zimmermann - dotnetpro 4-2005 2.Contract First Design und Microkernel- Framework – Am Anfang war der Vertrag – Ralp Westphal - dotnetpro 6-2005 Contract First Design und Microkernel- Framework – Am Anfang war der Vertrag – Ralp Westphal - dotnetpro 6-2005Contract First Design und Microkernel- Framework – Am Anfang war der Vertrag – Ralp Westphal - dotnetpro 6-2005 3.Contract First Design und Microkernel- Framework – Spicken nicht erlaubt – Ralf Westphal - dotnetpro 9-2005 Contract First Design und Microkernel- Framework – Spicken nicht erlaubt – Ralf Westphal - dotnetpro 9-2005Contract First Design und Microkernel- Framework – Spicken nicht erlaubt – Ralf Westphal - dotnetpro 9-2005

39 Resourcen 2/2 4.Software einfacher entwickeln – Das Software Universum – Ralf Westphal – dotnetpro 2-2006 Software einfacher entwickeln – Das Software Universum – Ralf Westphal – dotnetpro 2-2006Software einfacher entwickeln – Das Software Universum – Ralf Westphal – dotnetpro 2-2006 5.Software strukturieren mit Softwarezellen Keine Frage der Schichten – Ralf Westphal – dotnetpro 3-2006 Software strukturieren mit Softwarezellen Keine Frage der Schichten – Ralf Westphal – dotnetpro 3-2006Software strukturieren mit Softwarezellen Keine Frage der Schichten – Ralf Westphal – dotnetpro 3-2006 6.Dot Net TV Folge 10 – Microkernel Dot Net TV Folge 10 – MicrokernelDot Net TV Folge 10 – Microkernel 7.Basta 2005 – Slideset Pragmatische Anwendungsarchitektur – Zellen statt Schichten Basta 2005 – Slideset Pragmatische Anwendungsarchitektur – Zellen statt SchichtenBasta 2005 – Slideset Pragmatische Anwendungsarchitektur – Zellen statt Schichten

40 Fragen...

41 Kontakt www.bruke.de Andreas Bräsen Software Entwicklung E-Mail: abraesen@bruke.de abraesen@bruke.de Tel. 07243-765158


Herunterladen ppt "Applikationsentwicklung mit dem Microkernel von Andreas Bräsen.NET User Group Karlsruhe 23-Feb-2006."

Ähnliche Präsentationen


Google-Anzeigen