Hallo Miteinander,
ich hab mich im Forum schon umgesehen, hab aber leider noch keine Lösung bzw. Lösungsansatz für mein Problem gefunden.
Ich schreibe gerade ein kleines Peer-to-Peer Programm mit GUI (Java SWT) angelehnt an das FTP-Protokoll.
Das Programm soll möglichst die verschiedenen Schichten (Presentation-Layer, Dialog-Management-Layer und Data-Layer) trennen.
Momentan bin ich noch in der Konzeptionsphase und dem Erstellen eines UML-Klassendiagramms.
Die Funktionsweise ist sehr Simpel:
In der Data-Layer habe ich eine Klasse "TcpCon" die einen Socket für die Kommandoverbindung, einen ServerSocket für eingehende Datenverbindung .. etc. enthält.
Die Frage ist nun wie ich am besten die Schnittstelle zwischen den GUI-Layern und der Data-Layer programmiere.
Ich habe z.B. eine bestehende Verbindung und in einem Textfeld werden mir die Dateien des Ordners vom Server angezeigt auf dem ich mich gerade befinde.
Ich übernehme einen Dateinamen in ein "Welche Datei möchten Sie downloaden?" Textfeld und klicke auf Download.
Soll ich z.B. beim Anklicken des Download-Buttons im SeilectionAdapterDownload
Bei dem ersten Lösungsansatz bin ich mir da wegen der Schichtentrennung nicht so sicher, im GUI möchte ich ja nur eine Funktionalität der Data-Layer anstupsen und sie nicht selbst aufrufen.
Ausserdem bin ich mir auch nicht sicher ob eine Socket-Verbindung zum Server die ich vorher in Form eines TcpCon Objekts erstellt hab im Hintergrund immernoch bestehen bleibt. Diese habe ich
nämlich nur in einem DialogFenster mit new auf dem Heap angelegt.
Für den zweiten Lösungsansatz ist mir noch nichts konkretes eingefallen. Für Threads gibt es keine Streams. Process-Objekte haben zwar Streams, aber wäre es nicht zu Aufwendig die Data-Layer
extra mit einer main()-Methode auszustatten, als externen Prozess laufen zu lassen und dann einen Stream in einer ServiceLoop zu öffnen?
Zur Funktionweise:
die sendKommandoRetr Methode schickt einfach einen Kommandostring "RETR fname" an den Server und dieser verbindet sich daraufhin auf den Client in einer Datenverbindung und schickt das File.
(Dieser Punkt stellt kein Problem dar, das haben wir letztes Semester schon ohne GUI programmiert)
Das Problem ist jetzt wirklich nur die Schnittstelle zwischen GUI und der Anwendungsschicht.
Welchen Lösungsansatz soll ich verfolgen, bzw. kennt einer von euch vielleicht noch eine bessere Lösung?
Mfg Sven
ich hab mich im Forum schon umgesehen, hab aber leider noch keine Lösung bzw. Lösungsansatz für mein Problem gefunden.
Ich schreibe gerade ein kleines Peer-to-Peer Programm mit GUI (Java SWT) angelehnt an das FTP-Protokoll.
Das Programm soll möglichst die verschiedenen Schichten (Presentation-Layer, Dialog-Management-Layer und Data-Layer) trennen.
Momentan bin ich noch in der Konzeptionsphase und dem Erstellen eines UML-Klassendiagramms.
Die Funktionsweise ist sehr Simpel:
In der Data-Layer habe ich eine Klasse "TcpCon" die einen Socket für die Kommandoverbindung, einen ServerSocket für eingehende Datenverbindung .. etc. enthält.
Die Frage ist nun wie ich am besten die Schnittstelle zwischen den GUI-Layern und der Data-Layer programmiere.
Ich habe z.B. eine bestehende Verbindung und in einem Textfeld werden mir die Dateien des Ordners vom Server angezeigt auf dem ich mich gerade befinde.
Ich übernehme einen Dateinamen in ein "Welche Datei möchten Sie downloaden?" Textfeld und klicke auf Download.
Soll ich z.B. beim Anklicken des Download-Buttons im SeilectionAdapterDownload
- einfach die public Methode sendKommandoRetr(String fname) eines vorher erzeugten TcpCon Objekts aufrufen, oder
- in der TcpCon Klasse eine Serviceloop implementieren die per Eingabe-Stream von der GUI "RETR fname" bekommt und dann eine Private Methode sendKommandoRetr(String fname) aufruft
Bei dem ersten Lösungsansatz bin ich mir da wegen der Schichtentrennung nicht so sicher, im GUI möchte ich ja nur eine Funktionalität der Data-Layer anstupsen und sie nicht selbst aufrufen.
Ausserdem bin ich mir auch nicht sicher ob eine Socket-Verbindung zum Server die ich vorher in Form eines TcpCon Objekts erstellt hab im Hintergrund immernoch bestehen bleibt. Diese habe ich
nämlich nur in einem DialogFenster mit new auf dem Heap angelegt.
Für den zweiten Lösungsansatz ist mir noch nichts konkretes eingefallen. Für Threads gibt es keine Streams. Process-Objekte haben zwar Streams, aber wäre es nicht zu Aufwendig die Data-Layer
extra mit einer main()-Methode auszustatten, als externen Prozess laufen zu lassen und dann einen Stream in einer ServiceLoop zu öffnen?
Zur Funktionweise:
die sendKommandoRetr Methode schickt einfach einen Kommandostring "RETR fname" an den Server und dieser verbindet sich daraufhin auf den Client in einer Datenverbindung und schickt das File.
(Dieser Punkt stellt kein Problem dar, das haben wir letztes Semester schon ohne GUI programmiert)
Das Problem ist jetzt wirklich nur die Schnittstelle zwischen GUI und der Anwendungsschicht.
Welchen Lösungsansatz soll ich verfolgen, bzw. kennt einer von euch vielleicht noch eine bessere Lösung?
Mfg Sven