Schichtenarchitektur

LL0rd

Erfahrenes Mitglied
Hallo Leute,

ich habe da mal eine Frage zu Architekturen. Ich muss gerade eine Doku für eine Software schreiben und weiß derzeit nicht ganz, was ich für eine Schichtenarchitektur habe. Das Programm macht folgendes:

Ich habe ein Programm, dass "rumrechnet". Der Client verbindet sich zum Server und kopiert dort Daten hin und auch sich selbst. Sobald der Server frei ist, startet er die Client-Anwendung (mit modifizierten DLL Dateien) und führt die Berechnung aus. Nachdem die Berechnung abgeschlossen wurde, landen die Daten beim Server. Ein Client kann dann das Ergebnis wieder abrufen.

Ist es jetzt eine ganz normale dreischichtige Architektur?
 
Ich vermute eher nicht. "Schicht" kannst du auf zwei verschiedene Arten definieren. Zum einen gibt es logische Schichten, d.h. eine Art Gruppierung von Programmcode. Diese Schichten haben meist einen bestimmten Aufbau und vor allem bestimmte Zuständigkeiten. Hierrein fällt dann z.B. die klassische Aufteilung in Presentation-, Service-, DataAccessLayer. Diese bilden sich dann im Idealfall auf bestimmte physische Konstrukte des Projektes ab (Packagestruktur o.ä.). Diese werd meist auch dahingehend ausgewählt, wie das Projekt physisch verteilt bzw. deployed wird. Womit wir also auch schon bei der zweiten Art sind Schichten zu definieren.

Die logisch definierten Schichten kannst du ja erstmal ohne weiteres auf einer physischen Maschine (also z.B. 1 Tomcat, 1 Application Server o.ä.) laufen lassen. Jetzt ist es aber z.B. auch möglich, die Presentation in nem Tomcat laufen zu lassen, das restliche Backend aber in einem AS. Dies zieht auch die Umwelt (mit welchen Systemen kommuniziert mein System) mit ein. Meistens spricht man ja noch mit irgendwelchen Drittsystemen, Datenbanken hier, WebServices da usw. Das ist dann eher Architektur in der Verteilungssicht.

Die zwei Sachen kommen jetzt meist dahingehend zusammen, dass die letztere Sicht auf Architektur die erste erheblich beeinflusst. Wenn ich weiß, dass das Projekt potentiell auf mehrere Maschinen verteilt laufen soll, dann muss ich das natürlich bei meiner logischen Aufteilung beachten und dementsprechen Packages aufteilen usw.

Soviel zum theoretischen Teil. Was du beschreibt ist ja jetzt erstmal die zweite Architektursicht - sprich, welche umgebende Systeme gibt es, und wie kommuniziert dein System damit. Sowas ist schnell in einem Diagramm aufgezeichnet (nicht der Ablauf, aber die kommunizierenden Systeme). Wie dein Programm jetzt in sich logisch aufgeteilt ist, ist jetzt die Frage.

Wie es scheint, ist dein Programm keine klassische Anwendung mit Benutzerinterface, Logik und persistenter Datenhaltung. Daher ist es auch kein großes Manko keine klassische 3 Schichten Architektur zu finden. Grundsätzlich hast du ja die Unterscheidung in Client und Server gemacht. Wie es scheint, übernimmt der Client aber auch unterschiedliche Rollen. Dann gibt es sicher für diese Rollen speziellen Code, oder?

Ein guter Ansatz ist es, sein System in fachliche Verantwortlichkeiten aufzuteilen, danach evtl. technische Abgrenzungen zu machen (Fachlichkeit IMMER vor Technik).

Joa, alle Klarheiten beseitigt? ;)

REINHAUN!
 
Naja, das ist eben so das Problem, das ich mit der Definition habe. Also im Grunde hast du recht, der Client (oder genauer gesagt die Client Anwendung) übernimmt verschiedene Rollen in dem ganzen Prozess.

Das ganze hat unter anderem einen historischen Hintergrund. Ursprünglich war das ganze eine einzige Anwendung, die auf einem High End Server ausgeführt wurde. Jetzt soll die Anwendung auch auf normalen Desktop - Systemen laufen. Okay, an dieser Stelle muss ich noch einen Schritt zurück gehen. Die .exe Datei besteht aus verschiedenen Teilen, die ein Anwender selbst schreibt. Erster Teil ist der Startteil, da wird einfach nur eine Methode aus der GUI.dll aufgerufen und der zweite Teil sind Klassen, die von einer abstrakten Klasse (aus der Core.dll) abgeleitet worden sind.

Jetzt führt ein Benutzer die Anwendung aus und kann sich nun entscheiden. Er kann die Berechnung auf dem lokalen Rechner ablaufen lassen oder er verbindet sich mit dem Server. Wenn er sich mit dem Server verbindet, dann überträgt er die EXE mit der Aufgabe dorthin. Der Server sucht sich eine Maschine raus, auf der gerechnet werden soll, und überträgt die EXE dann auf diese Maschine. Alle anderen DLL Dateien kommen dann von einer lokalen Library und wurden vorab modifiziert, sodass die Client Anwendung die Berechnung durchführt. Anschließend wird das Ergebnis dann an den Server übertragen und der wirkliche Client kann es dann abrufen.

Das soweit zur Funktion des Systems.
 

Neue Beiträge

Zurück