Date post: | 05-Apr-2015 |
Category: |
Documents |
Upload: | eberhard-henzel |
View: | 105 times |
Download: | 0 times |
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: [email protected]@bruke.de
Tel. 07243-765158Tel. 07243-765158