Riduzione al minimo delle dipendenze per le GUI

4

Ho lavorato a un progetto e sono stato incaricato di progettare il front-end dell'interfaccia grafica dei progetti. Sto scrivendo in Java e usando il toolkit Swing. Per quanto riguarda l'usabilità, il front-end della GUI segue tutte le euristiche di Nielsen. Gli utenti possono facilmente arrivare dove vogliono passare attraverso il clic di un pulsante / JComboBox. Essenzialmente, nei termini Swing, ciò che accade è che le loro azioni guidano la creazione / eliminazione di pannelli personalizzati.

La GUI sta procedendo bene per la maggior parte. Tuttavia, devo ammettere di essere completamente costernato nella stretta rete di dipendenze in cui il mio codice viene soffocato.

Il problema principale che ho riscontrato, che non ho ancora potuto correggere, è come mantenere un riferimento ai pannelli / pulsanti modificati.

Darò un esempio:

Dire che c'è un pulsante A

Diciamo che c'è un pannello B che mostra l'immagine C

Diciamo che c'è un'altra immagine D (non attualmente visualizzata dal pannello B)

Quando l'utente fa clic su A, il pannello B dovrebbe rimuovere l'immagine C e visualizzare l'immagine D

La mia domanda è, qual è il modo migliore per tenere traccia del pannello B? Da quando ho bisogno di un punto globale di accesso al pannello di B, la mia soluzione è stata finora di calzascarpe solo in una variabile statica, e accedervi attraverso una serie di getter e setter statici. E questa variabile statica è solitamente memorizzata nella classe originale del riferimento. Cioè UserPanel ha una variabile statica che memorizza un riferimento a se stesso.

Esiste un modo facile, provato e vero per gestire questo tipo di situazioni? Come la mia GUI funziona bene, ma non è affatto modulare e / o robusto. Per aggiungere a questo, il temuto problema delle "dipendenze cicliche" evitato da così tanti programmatori è qui fuori in pieno effetto. Sono abbastanza nuovo per lo sviluppo e voglio solo fare in modo che il mio codice sarà abbastanza estendibile e non causerà un gran mal di testa per la prossima persona che decide di ottenere una prova a esso.

So che ci sono un sacco di libri là fuori che probabilmente hanno una bella soluzione elegante a questo, ma sfortunatamente non ho il tempo di leggere ora. Ho bisogno di qualcosa che sia veloce e sporco.

Grazie in anticipo

    
posta tuba09 29.06.2013 - 19:52
fonte

2 risposte

1

il pannello B aggiunge un ActionListener al pulsante A che (chiama un metodo di B) fa le modifiche

in questo modo non è necessario mantenere l'accesso (questo viene fatto implicitamente dall'elenco di azioni)

quindi B dovrebbe conoscere solo le immagini che sta visualizzando,

e il pannello genitore di B e A ha solo bisogno di sapere che B sta ascoltando A

    
risposta data 29.06.2013 - 20:36
fonte
1

Hai sentito dell'architettura del web layer MVC? Bene, è sbagliato. MVC è un modulare design della GUI . È stato inventato con Smaltalk e ha contribuito a stabilire OOP come "il" modo di scrivere applicazioni GUI.

In breve, si scrivono oggetti del modello che contengono tutte le informazioni necessarie, iniziano con il "documento", ma anche ovunque si debba mostrare una lista, o inserire alcuni dati complessi, o giù di lì. Dovrebbero esserci alcune API di base condivise da tutti (o la maggior parte) dei modelli, ma va bene aggiungere alcuni metodi solo laddove abbia senso.

Quindi gli oggetti vista sono quelli che gestiscono i widget GUI, i controller, ecc. per mostrare il contenuto dei modelli. Alcune viste sono generiche e possono mostrare quasi tutti i modelli, altre sono più specifiche e possono essere abbinate solo ad alcuni sottoinsiemi di classi di modelli.

Infine i controller. Alcuni quadri li omettono o li rendono molto sottili. Ma nella maggior parte dei casi è meglio non permettere alle viste di modificare direttamente i dati del modello, è meglio specializzare le azioni negli oggetti del modello. Questa separazione consente in genere un riutilizzo migliore, una singola vista può essere utilizzata in modi diversi con diversi controller.

Si noti che non si tratta di un'architettura a livelli, ognuno dei diversi moduli nella propria applicazione avrà in genere almeno uno di questi trii, ma si spera solo un piccolo codice aggiuntivo per ciascuno, ereditando la maggior parte del comportamento da classi più generiche. / p>     

risposta data 01.07.2013 - 02:35
fonte

Leggi altre domande sui tag