Domanda

Sono in procinto di refactoring di un'applicazione swing di utilizzare ActionListeners alle classi di azione perché ho capito che molti dei miei voci di menu stanno per essere utilizzato in una barra degli strumenti pure.

In questo momento ho una chiamata ImportExport di classe che si occupa dello stato del modello sottostante e quindi visualizza le finestre di dialogo utente appropriati. ImportExport ha le funzioni save(), saveAs() e open(). Quando un utente fa clic sulla voce di menu "Apri", l'action listener chiama open(), open() prima controlla se il modello ha i cambiamenti e se questo è il caso viene visualizzata una finestra che chiede all'utente se vuole salvare la prima. Ora, se l'utente fa clic su "Sì" open() chiamate save() che svolge ancora una volta alcuni controlli e visualizza finestre di dialogo degli utenti. save() è abbastanza persistente: L'unico modo per uscire da questa azione è o salvando con successo o l'utente decide che vuole annullare. Sono fermamente contare sul feedback che fornisce save() e se un utente vuole annullare ho anche annullare la funzione chiamante open().

Ho voluto dividere la classe ImportExport in tre classi (OpenAction, SaveAction & SaveAsAction), ciascuno di loro sottoclassi AbstractAction e, infine, sbarazzarsi della classe ImportExport. E questo è dove il mio problema si pone: come faccio a dire il SaveAction da eseguire se l'utente vuole salvare il modello prima di aprire un altro? E come faccio ad avere risposte se l'utente decide di annullare?

E 'questo anche il giusto approccio? Non mi piace aver duplicato di codice nel salvare e azione aperta e ho già messo il più funzionalità possibile nel mio modello, ma utente sottostanti le finestre di dialogo sono obiously fuori posto c'è quindi questo è alcuna opzione. È stato progettato Action a tutti di tenere questo tipo di funzionalità o sould io continuo la mia classe ImportExport e semplicemente delegare tutte le azioni chiamate alle funzioni appropriate in ImportExport. Come si usa Actions?

È stato utile?

Soluzione

a volte aggiungo un'azione 'controllore' quando v'è un albero decisionale coinvolti. OpenAction, SaveAction e SaveAsAction sarebbero sottoclasse questo controller azione. L'azione di controllo sarebbe determinare lo stato del modello e richiedere ulteriori informazioni da parte dell'utente, se del caso e quindi chiamare la sottoclasse corretta.

Altri suggerimenti

vorrei creare una classe ImportExportController, avendo questi metodi: open, save, saveAs. Questo controller sarebbe conoscere la logica di business.

Le mie lezioni Action non sarebbe contenere un sacco di logica di business. Avrebbero chiamare solo il controller.

Ma queste azioni avrebbero contenere tutte le etichette, le icone, l'acceleratore ... che devono essere visualizzati in JButton, JMenuItem, ecc.

Per quanto mi riguarda, sono Actions GUI orientata classi, utilizzate per comodità (e sono molto comodo!), Ma non le classi dedicate a gestire la logica di business.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top