Erste Hilfe: Klassenaufteilung Client - Server
Added by sonarie 10 months ago
Hallo,
das ist mein erstes SIMON Projekt. Es handelt sich um ein Uniprojekt, ein simpler Shop mit Benutzerlogin, Artikeln, Warenkorb, Rechnung - fertig. Quasi zum Erlernen von JAVA.
Die GUI, bzw. CUI kommt in das Client-Projekt, das ist soweit klar. Kann sie auch schon aufrufen, nachdem ich Server und dann den GUI-Client gestartet habe.
Doch was nun? Sobald ich Methoden über die GUI aufrufen möchte, bekomme ich Exceptions, da ich natürlich noch nichts wirklich an den Klassen geändert habe.
Hauptsächlich greift die CUI/GUI auf unsere Klasse "Shopverwaltung" zu, von wo aus alles in die jeweiligen Artikel- und Accountverwaltungen etc. delegiert wird und die Standardmethoden stattfinden etc.
Also ist die Shopverwaltung im Shared-Projekt, weil sowohl Client als auch Server "ranmüssen"?
Wie ist das mit den Interfaces? Sorry, ich hoffe ihr könnt mir einen Denkanstoss geben. Das Thema Client Server ist für mich Neuland.
Also meine Aufteilung ist bis jetzt grob so:
CLIENT:
- GUI_Client
- CUI_Client (wahlweise)
- ClientCallbackImpl (mit Inhalt vom HelloWorldBeispiel <--- was muss da rein?)
SHARED:
- Exceptions
- Value Objects (Kunde, Artikel, etc.)
- ClientCallbackInterface (mit Inhalt vom HelloWorldBeispiel <--- muss das quasi die Shopverwaltung sein?)
- ServerInterface (mit Inhalt vom HelloWorldBeispiel <--- was muss da noch rein?)
SERVER:
- Server
- PersistenceManager
- ServerInterfaceImpl (mit Inhalt vom HelloWorldBeispiel <--- was muss hier rein?)
- Accountverwaltung
- Artikelverwaltung
(- Shopverwaltung (?))
(- Speicherung der Shopdaten in Textdatei (?) oder in SHARED)
Ich wäre über Hilfe sehr sehr dankbar...
Replies (3)
RE: Erste Hilfe: Klassenaufteilung Client - Server - Added by achristian 10 months ago
Hallo,
mit SIMON (oder auch RMI) eine verteilte Anwendung (Client-Server) zu bauen, ist nicht viel anders, als eine rein lokale Anwendung zu bauen.
Dein Shop muss ja, in groben Zügen folgendes haben:
1) Ein User-Interface (GUI oder Console, egal)
2) Ein Backend für den Shop (mit Benutzerverwaltung, ...), quasi das, was man unterhalb des User-Interfaces findet
3) Die Persistenz, welche sich nochmal unterhalb des Backends befindet
Um nun das ganze verteilt zu machen (Client-Server) muss man zwischen 1 und 2 mittels Interfaces SIMON einbauen. Aber die Empfehlen sie sowieso, auch ohne SIMON, weswegen der Umbau zu SIMON kein großes Thema sein sollte. Wenn du allerdings schon Probleme mit allgemeinen Interfaces hast, dann hast du noch ein wirklich großes Stück Arbeit vor dir.
Hauptsächlich greift die CUI/GUI auf unsere Klasse "Shopverwaltung" zu, von wo aus alles in die jeweiligen Artikel- und Accountverwaltungen etc. delegiert wird und die Standardmethoden stattfinden etc.
Also ist die Shopverwaltung im Shared-Projekt, weil sowohl Client als auch Server "ranmüssen"?
Jein... Dem Client ist es so ziemlich egal WIE die Shopverwaltung implementiert ist. Ihn interessiert nur, wie er den Shop zu bedienen hat, also welche Methoden es gibt. Das heisst, in "Shared" kommt das Interface der Shopverwaltung, in "Server" kommt die dazu passende Implementierung.
Aber kommen wir nochmal auf deine bisherige Aufteilung zurück:
CLIENT:
- GUI_Client
- CUI_Client (wahlweise)
- ClientCallbackImpl (mit Inhalt vom HelloWorldBeispiel <--- was muss da rein?)
ClientCallbackImpl: Wenn der Server nicht von sich aus den Client über irgendwas benachrichtigen soll, dann kannst du dir das sparen. Der Callback ist nur dazu da, dass der Server, wann immer er es für richtig hält, Methoden beim Client aufrufen kann.
SHARED:
- Exceptions
Sofern diese von beiden Seiten benutzt werden, ja.
- Value Objects (Kunde, Artikel, etc.)
Also Objekte die der Server anlegt, mit Daten füllt und dem Client zum abrufen zur vefügung stellt? --> Jepp, die kommen ebenfalls in Shared.
- ClientCallbackInterface (mit Inhalt vom HelloWorldBeispiel <--- muss das quasi die Shopverwaltung sein?)
Nein, das ist NICHT deine Shopverwaltung. Das ist das Interface, das dein Server nutzen kann, um Methoden beim Client aufzurufen. Für dein Beispiel erstmal irrelevent.
- ServerInterface (mit Inhalt vom HelloWorldBeispiel <--- was muss da noch rein?)
DAS ist deine Shopverwaltung. Du kannst die File auch "ShopVerwaltungInterface" nennen wenn du möchtest
SERVER:
- Server
hier steht nur ein bisschen SIMON Code drin der die Registry startet, das Remote-Objekt anlegt und an die Registry bindet etc...
- PersistenceManager
Für Zugriffe auf deine Persistenzschicht. Evtl. Hibernate?
- ServerInterfaceImpl (mit Inhalt vom HelloWorldBeispiel <--- was muss hier rein?)
Das ist die Implementierung deiner Shopverwaltung.
- Accountverwaltung
- Artikelverwaltung
Naja, das kommt jetzt drauf an wie du die Struktur aufbauen willst. Eveltuell schaust du dir mal das Session Pattern an: http://dev.root1.de/projects/simon/wiki/Sample_session_pattern
(- Shopverwaltung (?))
siehe oben...
(- Speicherung der Shopdaten in Textdatei (?) oder in SHARED)
In Shared auf keinen Fall. Das beleibt alles im Serverpaket.
Ihr habt sicher auch was zum Thema UML und Klassendiagram etc. gelernt. Hast du dir da schon Gedanken gemacht?! Hast du da schon was skizziert?
Für allgemeine Design-Fragen (und das hier sind allgemeine Design-Fragen, nix wirklich SIMON spezielles), kann ich dir auch folgendes Form empfehlen:
Hoffe geholfen zu haben,
Gruß
Alex
RE: Erste Hilfe: Klassenaufteilung Client - Server - Added by sonarie 10 months ago
Hey Alex,
vielen vielen Dank für die schnelle Antwort.
Du hast mir sehr geholfen und kannst das Thema jetzt auch gerne entfernen, da es nicht wirklich hierhin gehört und eher ein grundlegendes Programmier-verständnis-problem war.
Lieben Gruß
RE: Erste Hilfe: Klassenaufteilung Client - Server - Added by achristian 10 months ago
Hallo,
nur damit du mich nicht falsch verstehst: Ich hab kein Problem damit solche Fragen hier zu beantworten. Werde den Thread hier auch nicht löschen. Andere könnten ja prinzipiell vor dem gleichen Problem stehen und hier Hilfe suchen.
Aber die Wahrscheinlichkeit mehr und detailiertere Antworten zu bekommen ist in größeren und allgemeineren Foren wohl größer.
Gruß
Alex
(1-3/3)