Projekt Realisierung

CrashKurs

Mitglied
Hey Leute,

ich und ein paar Freunde von mir wollen ein Doppelkopf-Projekt in Java realisieren.
Ein paar Gedanken dazu haben wir uns schon gemacht:
-Das Spiel soll im Netzwerk/über Internet spielbar sein
-Die Ergebnisse jeder Spielrunde sollen in einer externen Datenbank gespeichert werden
-Der Server regelt die meisten Berechnungen/Anfragen etc.
-Der Client stellt alles graphisch dar und übermittelt Benutzeraktionen zum Server

Nun stehe ich vor zwei Problemen, und zwar:
1. Wie erstellt man ein solches, etwas größeres Projekt, sodass der Aufbau gut strukturiert ist?
(Ich arbeite bei einer größeren Firma, dort habe ich sehr viele abstrakte Klassen und Vorimplementierungen gesehen, wäre das der richtige Weg? Ich würde mich über ein paar Denkanstöße freuen)
2. Sollen die Hauptklassen als Singleton implementiert werden, sodass man sie überall über eine Utility-Klasse ansprechen kann. Meine Idee sah bis jetzt in etwa so aus:
Java:
public class DokoHelper {

    public static void init()
    {
        controller = new ControllerImpl().getInstance();
    }

    private static ControllerImpl controller;

    public static ControllerImpl getController()
    {
        return controller;
    }
}

public class ControllerImpl extends AbstractController {

    private static ControllerImpl controller = new ControllerImpl();

    public static ControllerImpl getInstance()
    {
        return controller.getInstance();
    }
}
Hier soll man dann über die Methode DokoHelper.getController() das Objekt ansprechen. Wäre das so am Besten oder gibt es andere Wege, wie man das realisieren könnte?

Freue mich über jede Hilfe, danke schonmal im vorraus!

Viele Grüße,
Crashkurs
 
Zuletzt bearbeitet:

DarXun

Aktives Mitglied
Guten Morgen,

zu deiner ersten Frage:

Es gibt keine tatsächliche "Lösung" wie man so ein Projekt strukturiert, das muss man selbst wissen.
Hier auch schon auf abstrakte Klassen oder Implementierungen einzugehen ist allerdings der falsche Ansatz. Es geht ja mehr um das Projektmanagement und die herangehensweise, nicht um die tatsächliche Implementierung.
Bei einem Projekt dieser Größe empfinde ich ein richtiges Projektmanagement aber eher als Overkill, einfach drauf los programmieren ist aber auch fast nie die richtige Lösung.
Meiner Meinung nach ist es sinnvoll, zuerst alle Bestandteile/Komponenten eurer Anwendung zu identifizieren (Ihr habt z.B. Clients und Server) und sich dann Gedanken darüber zu machen, wie diese Komponenten zueinander in Beziehung stehen.
Danach kann eine Softwarearchitektur geplant werden. Wie werden die verschiedenen Komponenten aufgebaut? Welche Technologien (Sprachen, Systeme) nutze ich für welche Komponenten? Und und und...

Wenn man das geschafft hat kann man sich auch wirklich Gedanken darüber machen, wie die Sachen implementiert werden sollten.

Es gibt aber nie DIE EINE BESTE Lösung, wie Ihr das machen solltet. Jede (Projekt-)Gruppe hat da eigene Ansätze und Herangehensweisen.


Zu deiner zweiten Frage:

Ich persönlich bin kein Fan von Singletons.
Viele Singletons zu nutzen zeugt eher von einer schlechten Architektur und stellt meiner Meinung nach einen "Schritt zurück" dar, da man damit ja von der Objektorientierung in Richtung prozedurale Programmierung geht. (Ist nur meine Meinung, will da niemandem ans Bein pinkeln..)

Abgesehen davon..
Wieso solltest du deine Hauptklassen als Singleton implementieren, sie DANN aber über Utility-Klassen ansprechen lassen?
Sprich: Welchen Mehrwert bringen dir die Utility-Klassen.

Dein Codebeispiel ist nicht wirklich nützlich und macht im Übrigen auch (Code-technisch) nicht viel Sinn.
 

CrashKurs

Mitglied
Hey,

erstmal Danke für deine Antwort, wir werden das dann wohl intuitiv machen, wie wir es für am Besten halten ;-)

Der Sinn hinter den Singletons war für uns eher, dass wir quasi keine Observer benötigen, um Änderungen in untergeordneten Objekten nach oben "bubbeln" zu lassen.
Die Utility-Klasse hat den Mehrwert eines Adapters, sodass wir dauerhaft die Methode DokoHelper.getController() verwenden können und nicht ControllerImpl.getInstance(), sodass man, falls die Klasse erweitert wird oder eventuell eine andere Klasse dafür eingebaut wird, nicht den gesamten Code ändern muss, sondern nur die Methoden im DokoHelper anpassen muss.
Kam uns zumindest recht schlüssig vor, dass so zu verwenden :)

Grüße,
Crashkurs
 

DarXun

Aktives Mitglied
Aber ein Observer ist doch total gut.
Da hat man eine klare Zugriffsstruktur und nicht so eine starke Kopplung.
Mit den vielen Singletons machst du ja genau das Gegenteil zu dem, was du mit den Utility-Klassen vor hast; da willst du ja eine lose Kopplung schaffen.
Mit den Singletons und dem nicht nutzen der Alternative (Observer/Observable) sind die Komponenten dann aber wieder stark gekoppelt.

Das mit dem Adapter kann ich wohl nachvollziehen. Wenn du aber schon sagst, dass es möglich sei, dass sich konkrete Implementierungen in Zukunft ändern können (ControllerImpl wird z.B. durch ControllerImpl2 ersetzt), dann würde ich aber auch entsprechende Schnittstellen vereinbaren und dann nur noch über die Interfaces darauf zugreifen (Eine Schnittstelle hast du ja mit AbstractController, du referenzierst aber immer nur ControllerImpl).
 

CrashKurs

Mitglied
Da hast du schon Recht, nur haben wir beispielsweise beim Server eine Klasse NetworkManager, die für jeglichen Autausch Server<->Client zuständig ist. In dieser Klasse haben wir eine Liste mit allen verbunden Clienten, jeder Client hat einen Thread fürs Nachrichten senden und einen fürs Nachrichten empfangen und empfangene Nachrichten sollen an eine andere Klasse (Controller) weitergeleitet werden, die diese Nachrichten dann aufs GUI oder auf die Datenbank anwendet.
Hatten uns das dann besser vorgestellt über Singletons, da wir ja sonst bei Observern eine Aufrufhierarchie hätten, die in etwa so aussieht: Controller->NetworkManager.setObserver->Client.setObserver->Empfangender Thread.setObserver

stattdessen haben wir im empfangenden Thread nur:
DokoHelper.getController().receiveMessage() bei ankommenden Nachrichten

Haben wir etwas übersehen, wodurch die Observer-Konstruktion besser wäre? ???:L

LG und danke für die Hilfe!
Crashkurs
 

KSG9|sebastian

Top Contributor
Abgesehen davon das Singletons nicht für das gedacht seid für das ihr sie verwenden wollt ist dein Code dazu auch "kaputt".

Rufe ich 5x Controller#init auf habe ich 5 Instanzen davon. Zwar komme ich nur an die letzte ran, trotzdem existieren die anderen 4 unter Umständen noch irgendwo oder werden irgendwo referenziert.

Du willst Singletons einsetzen um von überall auf alles zugreifen zu können - genau das macht eine Architektur kaputt. Wenn Klassen miteinander kommunizieren dann mach das über Oberserver, Events (Listener - Publisch/Subscribe) o.ä. aber nicht über Singletons die dazu mißbraucht werden.
 

DarXun

Aktives Mitglied
Stimme meinem Vorredner vollkommen zu.

Ich verstehe halt auch nicht, wie du das ganze Konstrukt dem Observer/Observable-Pattern vorziehen kannst.
Denn, seien wir mal ehrlich, dass deine Aufrufhierarchie dadurch "lesbarer" erscheint(!), ist kein Grund die Architektur anders zu bauen. Ist ja auch nicht so, dass eben diese Aufrufe oft programmiert würden.
 

fastjack

Top Contributor
Du brauchst dafür keine Singeletons. Was Du beschreibst ist ja eigentlich MVC und so müsst ihr es auch umsetzen. Habt ihr schonmal über Spring nachgedacht?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zrebna Wie ermittelt man alle testbaren (zu testenden) Klassen in seinem Maven-Projekt? Allgemeine Java-Themen 23
G Maven Projekt JAR-Datei Allgemeine Java-Themen 6
K Java-Projekt Allgemeine Java-Themen 11
K Java-Projekt Allgemeine Java-Themen 0
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
Jose05 mit 2 - 3 Personen an einem Projekt coden Allgemeine Java-Themen 2
Momo16 Brauche Hilfe - Java Projekt kann nicht erstellt werden Allgemeine Java-Themen 12
G JavaFX Maven Projekt als .exe Datei exportieren Allgemeine Java-Themen 10
S Microservice Projekt verwalten Allgemeine Java-Themen 22
alinakeineAhnungv Hilfe bei einem Straßenbahn-Projekt von mir Allgemeine Java-Themen 18
O community projekt Allgemeine Java-Themen 9
T Projekt baut nicht mehr/lässt sich nicht mehr ausführen Allgemeine Java-Themen 6
pkm Warnungen in einem Drools-Projekt unterdrücken? Allgemeine Java-Themen 1
platofan23 Wie .txtDatei im Java Eclipse-Projekt bzw. in der Jar speichern? Allgemeine Java-Themen 7
O Suche Unterstützung für ein OpenSource-Projekt (grafischer Editor) Allgemeine Java-Themen 13
DonMalte Ambitioniertes Projekt für Einsteiger & Motivierte Allgemeine Java-Themen 0
Drachenbauer Wie finde ich den Aufrufer zu einer Methode, die sich nicht in meinem Projekt befindet? Allgemeine Java-Themen 2
B Problem zu einem Java Projekt Allgemeine Java-Themen 6
J File in Package erstellen & lesen mit Programmstart in externe Projekt Allgemeine Java-Themen 3
M Brainstorming für mein Projekt Allgemeine Java-Themen 30
D Warum kann ich eine (deflaut) Klasse aus einer Libary in einem anderen Projekt benutzen? Allgemeine Java-Themen 3
J Alle Unit Tests in Maven Modul Projekt ausführen Allgemeine Java-Themen 7
xYurisha Eclipse, Projekt beschädigt! Allgemeine Java-Themen 6
P BlueJ BlueJ Gloop City Projekt Allgemeine Java-Themen 0
R Praktikums Projekt Java vs MySQL Allgemeine Java-Themen 91
H Projekt Quadraturverfahren Rechner Allgemeine Java-Themen 2
S WebApplikation Projekt in Firma Allgemeine Java-Themen 2
S Eclipse Github Projekt in eigenes Projekt einbinden und nutzen Allgemeine Java-Themen 13
T iText mit eclipse richtig in Java-Projekt einbinden Allgemeine Java-Themen 2
J Java Projekt, Online-Datenabfrage, Visualisierung Allgemeine Java-Themen 3
markuskat Erste Schritte JavaEE WebApplication - Erstes Projekt Allgemeine Java-Themen 16
O Compiler-Fehler Wie kompiliere ich dieses Alt-Projekt ? Allgemeine Java-Themen 9
P Eclipse Projekt anlegen macht Problem Allgemeine Java-Themen 1
N Eclipse Projekt von GitHub in bestehendes Projekt einbinden Allgemeine Java-Themen 13
G Mein PDF Projekt mit iText Allgemeine Java-Themen 2
G Kleines Projekt Allgemeine Java-Themen 2
S Best Practice Brauche eine Idee für eine Java Projekt! Allgemeine Java-Themen 11
M Maven Dependency aus Projekt nicht aus Repo Allgemeine Java-Themen 3
S Erstes größeres Java Projekt: Etiketten Allgemeine Java-Themen 3
M Eclipse libgcrypt für window in java Projekt einbinden Allgemeine Java-Themen 1
N Kleines GUI/Sortier Projekt für die Uni Allgemeine Java-Themen 11
M Eclipse Eine xhtml aus einem JSF Projekt starten Allgemeine Java-Themen 2
A Android App Projekt Allgemeine Java-Themen 0
I Zu zweit an einem Projekt? Allgemeine Java-Themen 1
M SQL Datenbank in JAVA Projekt Allgemeine Java-Themen 3
U BlueJ NXT Projekt programmieren Allgemeine Java-Themen 0
J C++ Projekt (QT) in Java mit Klassen (nicht imperativ) nutzen (BridJ? JavaCPP? SWIG? JNA? JNI?) Allgemeine Java-Themen 2
A Ausführbare Java-Datei aus Projekt und Datenbank Allgemeine Java-Themen 3
K Code zu einem Projekt entschluesseln Allgemeine Java-Themen 15
A mini Projekt Allgemeine Java-Themen 4
U Eclipse Java Projekt - Webservice einbinden Allgemeine Java-Themen 7
I Projekt wird nicht erstellt Allgemeine Java-Themen 2
R Aus Eclipse Projekt ein UML erzeugen Allgemeine Java-Themen 3
V System.out.println an jeder Stelle im Projekt löschen Allgemeine Java-Themen 4
M JSF-Projekt, Datasourceproblem Allgemeine Java-Themen 7
B Großes Projekt "gut" schreiben Allgemeine Java-Themen 22
maestr0 Programmatische Java Projekt Erstellung Allgemeine Java-Themen 2
J Projekt mit mehreren Einzelprogrammen Allgemeine Java-Themen 2
P Ant oder Dynamic Web Projekt Allgemeine Java-Themen 3
Kenan89 Riesen Java Projekt Allgemeine Java-Themen 10
127.0.0.1 Subversion neues SVN Projekt, keine Main gefunden ?! Allgemeine Java-Themen 7
S Compiler-Fehler Providing JavaCompiler within Projekt Allgemeine Java-Themen 10
P Eclipse Gemeinsam mit NetBeans an einem Projekt arbeiten? Allgemeine Java-Themen 3
T HTTP HttpWebRequest in Swing-Projekt nutzen Allgemeine Java-Themen 4
S .Classpath Datei im Eclipse Projekt Allgemeine Java-Themen 7
Ollek MVC - Anwendung auf mein Projekt Allgemeine Java-Themen 18
J Herangehensweise an ein Projekt? Allgemeine Java-Themen 11
N Hilfe bei Projekt Allgemeine Java-Themen 5
M Suche Java-Projekt zum Thema Elektrotechnik Allgemeine Java-Themen 6
A Java Projekt (Daten Eingeben, Speichern und in Listen Ausgeben) Allgemeine Java-Themen 6
M Erstes eigenes Projekt Allgemeine Java-Themen 5
C Architekturvorschläge für kleines Projekt Allgemeine Java-Themen 2
Y Notenbuch - Projekt Allgemeine Java-Themen 56
N php projekt in java importieren Allgemeine Java-Themen 4
E Neues Projekt - Welche GUI / IDE /Techniken / etc. Allgemeine Java-Themen 14
J Open Source Projekt anbieten - Leitfaden gesucht Allgemeine Java-Themen 3
N Idee für Java Projekt Allgemeine Java-Themen 30
M GoogleMaps mit Projekt verknüpfen Allgemeine Java-Themen 7
Y Auszuführendem Projekt mehr Speicherplatz zuweisen Allgemeine Java-Themen 3
S Umstellen Java-Projekt zum Web-Projekt Allgemeine Java-Themen 3
B Komplettes Projekt als UML Diagramm mit eUML...geht das? Allgemeine Java-Themen 10
P Projekt-Export Allgemeine Java-Themen 10
D eclipse projekt ohne eclipse ausführen? Allgemeine Java-Themen 14
P Jar-export funktioniert nur bei einem projekt nicht Allgemeine Java-Themen 5
S brauche dringend help bei einem projekt (Römisch-dezimal) Allgemeine Java-Themen 3
S Projekt in Jbuilder 05 Allgemeine Java-Themen 3
M Import findet das Projekt nicht. Allgemeine Java-Themen 5
G Projekt aus Firma zuhause importieren? Allgemeine Java-Themen 7
T Projekt zur Abschlussprüfung genug? Allgemeine Java-Themen 6
N Beteiligung an Projekt Allgemeine Java-Themen 6
F "source not found" in eigenem Projekt mit eigenen Allgemeine Java-Themen 2
S Swing-Projekt zum Üben Allgemeine Java-Themen 5
G ||| Textdateien aus dem eigenen Projekt lesen. Allgemeine Java-Themen 16
S Listener-Problematik in komplexem Projekt Allgemeine Java-Themen 2
I "Einstiegs Projekt" Allgemeine Java-Themen 20
S Projekt als Jar abspeichern! wie? Allgemeine Java-Themen 6
A Eigenes jar file in projekt einbinden Allgemeine Java-Themen 4
T Java-Projekt bei sourceforge.net Allgemeine Java-Themen 3
G Projekt Planung - Teamwork Allgemeine Java-Themen 3
L Open Source Projekt Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben