Frage

Ich bin über eine Swing-Anwendung Refactoring von ActionListeners zu Action-Klasse verwenden, weil ich, dass viele meiner Menüpunkte realisiert werden als auch in einer Symbolleiste verwendet werden.

Im Moment habe ich eine Klasse namens ImportExport haben, die mit dem Zustand des zugrunde liegenden Modells befasst und zeigt dann die entsprechenden Benutzerdialoge. ImportExport hat die Funktionen save(), saveAs() und open(). Wenn ein Benutzer auf „Öffnen“ Menüpunkt klickt, ruft die Aktion Hörer open(), open() zuerst überprüft, ob die Modelländerungen hat, und wenn das der Fall ist wird ein Dialog mit dem Benutzer zu fragen, ob er zuerst retten will. Nun, wenn der Benutzer klickt auf „Ja“ open() ruft save() die wiederum einige Prüfungen durchführt und Benutzerdialoge zeigen. save() ist ziemlich hartnäckig: Der einzige Ausweg aus dieser Aktion zu erhalten, ist entweder durch die erfolgreichen Speicher oder der Benutzer entscheidet, dass er abbrechen will. Ich verlasse mich stark auf das Feedback, dass save() liefert und wenn ein Benutzer ich kündigen auch die Berufung open() Funktion abbrechen will.

Ich wollte die ImportExport Klasse in drei Klassen (OpenAction, SaveAction & SaveAsAction), jeder von ihnen Subklassen AbstractAction aufzuspalten und schließlich der ImportExport Klasse loszuwerden. Und das ist, wo mein Problem: Wie kann ich feststellen, das SaveAction auszuführen, wenn der Benutzer das Modell zu speichern, bevor ein anderes öffnen? Und wie bekomme ich Feedback, wenn der Benutzer auf Abbrechen entscheidet?

Ist das auch der richtige Ansatz? Ich mag es nicht in der und ich habe schon so viel Funktionalität wie möglich in meine zugrunde liegende Modell aber Benutzerdialoge sind obiously dort fehl am Platz setzen speichern und öffnen Aktion dupliziert Code haben, so dass diese keine Option ist. Wurde Action überhaupt entwickelt, um diese Art von Funktionalität oder sould zu halten, halte ich nur meine ImportExport Klasse und einfach delegieren alle Aktion auf die entsprechenden Funktionen in ImportExport aufruft. Wie verwenden Sie Actions?

War es hilfreich?

Lösung

ich hinzufügen, manchmal eine ‚Controller‘ Aktion, wenn es ein Entscheidungsbaum beteiligt ist. Openaction, SaveAction und SaveAsAction würde diese Controller Aktion Unterklasse. Die Controller-Aktion würde den Zustand des Modells bestimmen und fordern Sie weitere Informationen vom Benutzer gegebenenfalls dann die richtige Unterklasse nennen.

Andere Tipps

Ich würde eine ImportExportController Klasse erstellen, diese Methoden mit: open, save, saveAs. Dieser Controller würde die Business-Logik kennen.

Meine Action Klassen würde nicht viel Business-Logik enthalten. Sie würden die Regler nur nennen.

Aber diese Aktionen würden alle Etiketten, Icons, Beschleuniger enthalten ... das muß in JButton angezeigt werden, JMenuItem, etc.

Für mich sind Actions GUI-Klassen ausgerichtet sind, der Einfachheit halber verwendet (und sie sind sehr bequem!), Aber keine Klassen gewidmet Geschäftslogik zu behandeln.

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