Hallo zusammen,
ich arbeite zurzeit zusammen mit einem Freund an einem Schachspiel. Die Spiellogik steht schon (abgesehen von ein paar bugs, die wir im Moment beheben).
Im Moment ist auch eine 2d GUI in arbeit und später soll auch eine 3d GUI benutzt werden, also muss das ganze austauschbar sein.
Ich habe mir jetzt ein paar Gedanken zum (Software-)Design dazu gemacht und dafür einiges über MVC und MVP durchgelesen. Ich wollte jetzt MVP benutzen und habe dazu gerade einen Entwurf erstellt:
Anmerkungen: Mit Highlights ist gemeint, dass manche Felder markiert werden, z.B. um anzuzeigen, dass dort Züge möglich sind.
Ich habe beim Diagram Assozitationen erstmal rausgelassen.
Hier werden nicht alle vorhandenen Klassen und Methoden dargestellt, sondern nur die wichtigsten.
Das oben dargestellte Package "ChessLogic" existiert schon und funktioniert auch ganz gut.
Das package unten "Presentation" ist bisher nur ein Entwurf. Ich habe schon eine einfache 2d GUI angefangen, aber bisher ist das alles in eine Klasse gepackt.
Die Idee war jetzt, eine abstrakte klasse/interface (Abstract)ChessView zu erstellen, für die es dann für 2d und 3d und evtl. später für web konkrete implementierungen gibt.
Alle views können dann aber den selben Presenter und das selbe Model verwenden.
Wenn bei der View auf ein Feld geklickt wird, ruft die View beim Presenter OnFieldSelected() auf und der Presenter führt dann entsprechende Aktionen bei den Logikobjekten aus.
Als Model habe ich nicht das ChessBoard direkt gewählt, weil ich zusätzlich noch die oben erwähnten Highlights brauche und die mit in das ViewModel getan habe.
Wird dann ein Zug ausgeführt, wird vom Model oder vom Presenter (das weiß ich noch nicht genau) bei der View die Methode MoveExecuted() aufgerufen, wodurch sich die View dann updated. Entsprechendes gilt auch für HighlightsChanged().
Ein Problem ist auch noch, wie die ganzen Objekte nachher erzeugt werden.
Presenter, View und Model haben ja untereinander einige Beziehungen, deswegen bin ich mir nicht sicher, in welcher Reihenfolge die Objekte erzeugt werden sollten und welche Argumente den jeweiligen Konstruktoren dann übergeben werden sollten. Habt ihr da Ideen?
Was haltet ihr von dem Design? Würdet ihr das auch so machen? Habt ihr Verbesserungsvorschläge/Anmerkungen?
Vielen Dank schonmal für eure Hilfe!
Edit: Evtl. passt das auch besser ins allgemeine Forum, als ins AWT, Swing & SWT, bin mir aber nicht sicher.
ich arbeite zurzeit zusammen mit einem Freund an einem Schachspiel. Die Spiellogik steht schon (abgesehen von ein paar bugs, die wir im Moment beheben).
Im Moment ist auch eine 2d GUI in arbeit und später soll auch eine 3d GUI benutzt werden, also muss das ganze austauschbar sein.
Ich habe mir jetzt ein paar Gedanken zum (Software-)Design dazu gemacht und dafür einiges über MVC und MVP durchgelesen. Ich wollte jetzt MVP benutzen und habe dazu gerade einen Entwurf erstellt:
Anmerkungen: Mit Highlights ist gemeint, dass manche Felder markiert werden, z.B. um anzuzeigen, dass dort Züge möglich sind.
Ich habe beim Diagram Assozitationen erstmal rausgelassen.
Hier werden nicht alle vorhandenen Klassen und Methoden dargestellt, sondern nur die wichtigsten.
Das oben dargestellte Package "ChessLogic" existiert schon und funktioniert auch ganz gut.
Das package unten "Presentation" ist bisher nur ein Entwurf. Ich habe schon eine einfache 2d GUI angefangen, aber bisher ist das alles in eine Klasse gepackt.
Die Idee war jetzt, eine abstrakte klasse/interface (Abstract)ChessView zu erstellen, für die es dann für 2d und 3d und evtl. später für web konkrete implementierungen gibt.
Alle views können dann aber den selben Presenter und das selbe Model verwenden.
Wenn bei der View auf ein Feld geklickt wird, ruft die View beim Presenter OnFieldSelected() auf und der Presenter führt dann entsprechende Aktionen bei den Logikobjekten aus.
Als Model habe ich nicht das ChessBoard direkt gewählt, weil ich zusätzlich noch die oben erwähnten Highlights brauche und die mit in das ViewModel getan habe.
Wird dann ein Zug ausgeführt, wird vom Model oder vom Presenter (das weiß ich noch nicht genau) bei der View die Methode MoveExecuted() aufgerufen, wodurch sich die View dann updated. Entsprechendes gilt auch für HighlightsChanged().
Ein Problem ist auch noch, wie die ganzen Objekte nachher erzeugt werden.
Presenter, View und Model haben ja untereinander einige Beziehungen, deswegen bin ich mir nicht sicher, in welcher Reihenfolge die Objekte erzeugt werden sollten und welche Argumente den jeweiligen Konstruktoren dann übergeben werden sollten. Habt ihr da Ideen?
Was haltet ihr von dem Design? Würdet ihr das auch so machen? Habt ihr Verbesserungsvorschläge/Anmerkungen?
Vielen Dank schonmal für eure Hilfe!
Edit: Evtl. passt das auch besser ins allgemeine Forum, als ins AWT, Swing & SWT, bin mir aber nicht sicher.
Zuletzt bearbeitet: