Frage

Ich möchte ein Spiel schaffen, das sowohl lokal arbeiten und online.

Mein erster Gedanke war, eine Schnittstelle zu erstellen, die alle Methoden haben würden, die durch die GUI für die Business-Logik benötigt wird und hat dann eine Netzwerk-Implementierung und eine lokale Umsetzung.

Dies funktioniert gut für Request-Response-Nachrichten. Aber was sind Nachrichten, die der Server sendet, wo ich einige GUI-Komponenten aktualisieren (d JLabels)?

Meine erste Lösung dieses Problems war Zuhörer zu implementieren, wobei jede Änderung in der Implementierung wird ein Ereignis ausgelöst. Die GUI würde registrieren und entsprechend seine Komponenten ändern. Allerdings ruft Ereignisse in der Business-Logik zu feuern sieht ein wenig falsch.

Bin ich in der richtigen Spur? Weil ich glaube, ich bin es nicht. Irgendwelche Vorschläge?

Danke.

. HINWEIS: Der Client ist eine einfache Java Swing GUI

War es hilfreich?

Lösung

Was Sie beschrieben haben, wird das Ziel gesetzt, das Modell unabhängig von Präsentationsfragen dienen, was eine gute Sache ist. Dies wird Ihnen auch bei der Konzeption, Entwicklung und Wartung des Modells, da Sie Unit-Tests auf der Basis schreiben kann, dass bestimmte Änderungen im Modell bestimmte Ereignisse ausgelöst werden soll, ohne sich darum zu kümmern, was das wie auf einem Bildschirm aussehen könnte.

Und natürlich, es befreit Sie bis zu verschiedenen GUI-Designs für verschiedene Umgebungen haben.

Der Schlüssel ist, dass die Ereignisse über die Änderungen im Zustand des Modells sein sollten, und nicht über die beabsichtigten Aktionen / Darstellungen auf der Präsentationsebene. Lassen Sie die Präsentationsschicht handeln von ob / wie ein Modell Ereignis reagieren zu können.

Andere Tipps

Ich gebe zu, dass ich Web-Entwicklung zu tun, so habe ich nicht viel Erfahrung mit Schaukel.

Aber ich habe immer gedacht, dass die Art, wie ich es Ansatz würde wäre die App in Paketen / Ansicht zu brechen, / Modell und / Controller. Die Beziehungen wäre unidirektionale: / Controller über beide / Modell und / Blick wissen würde, aber weder alle Klassen von / Controller importieren würde oder jede andere

.

Die / View-Schicht-Komponenten würden nie JFrames sein; sie würden immer JPanel oder einem anderen geeigneten Behälter, die zusammen in JFrames nach Bedarf zusammengesetzt werden konnte. Jeder würde Verweis auf Listener-Schnittstellen hat, in Konstrukteuren initialisiert, und diese für die Ereignisbehandlung würde verschieben:

public class ExamplePanel extends JPanel implements ActionListener
{
    private JButton button;
    private ActionListener buttonListener;

    public ExamplePanel(ActionListener buttonListener)
    {    
        this.button = new JButton("Do Something");
        this.buttonListener = buttonListener;
        this.button.addListener(this.buttonListener);
    }

    public void actionPerformed(ActionEvent e)
    {
        this.buttonListener.actionPerformed(e);
    }
}

Diese Anordnung funktioniert gut mit Dependency Injection, denn jetzt kann der Controller eine lokale oder Remote-Implementierung dieser Listener-Schnittstelle verwenden mag, um das Verhalten in eine Art und Weise zu ändern, die nicht den Client überhaupt nicht beeinflusst.

Ich gebe zu, dass ich es nie den ganzen Weg durch befolgt haben.

Die Frühlings-Leute haben eine reiche Swing-Client-Modul, aber es scheint, in Ungnade gefallen zu sein. Es sieht aus wie sie, dass eine BlazeDS Richtung entschieden hat, für reiche Kunden eine bessere Wahl ist. Aber vielleicht können Sie einige Design-Ideen aus ihrem Ansatz aufzulesen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top