2012-06-07 15 views
15

Se desideri maggiori dettagli per favore fammelo sapere, o fai riferimento alle ultime righe di questa domanda. Ho già letto molto e sento che sto trasformando qualcosa di semplice in qualcosa di complicato e continuo a rimanere bloccato qua e là, quindi forse puoi aiutarmi in quei punti molto specifici.Come implementare correttamente MVC in Java con Swing?

Utilizzo Netbeans IDE 7 e JDK 7 e nessun framework. La prima finestra è un JFrame e tutte le altre finestre sono JDialogs con modal = true.

Domande:

  1. Come faccio a implementare correttamente il pattern MVC con swing? Dalle idee qui sotto Qual è il migliore: (A) o (B)? O forse un altro ... Perché è meglio?

    (A) principale:

    MyModel model 
    MyView view(model) 
    

    MyView:

    MyController(this, model) 
    

    (B)
    principale:

    MyModel model 
    MyView View 
    MyController controller(view, model) 
    
  2. quando clicco jbutton1 in MainFrame ne ho bisogno per aprire il SettingsFrame per modificare le impostazioni. dove dovrei istanziare la vista, il modello e il controller di SettingsFrame? Nel controller MainFrame?

  3. In termini di organizzazione e implementazione MVC, come dovrei gestire le funzionalità più specifiche che (apparentemente) mancano di uno o due "piedini" MVC (sia Modello che Visualizza o Controller)? Dovrei creare classi vuote per loro?

    a. The implementation of a TrayIcon 
    b. A URL connection class (an HttpsUrlConnection which will update data in the main jframe and also upload/download files) 
    c. A Directory Monitor (which will update data in the main jframe and also use the urlconnection to download a file) 
    d. My own implementation of TableModel 
    e. json 
    
  4. Come mantenere correttamente e utilizzare un oggetto con le impostazioni attraverso l'intera applicazione? Avrò bisogno delle sue informazioni in posti diversi (Views, Models, Controllers) ma potrebbero essere alterate dall'utente durante il runtime). È una buona idea rendere questo modello un singleton?

  5. Cosa devo fare quando:

    a. View needs some data from the Model? 
    What I'm doing: using the reference of Model which I keep in the View 
    b. View needs some data from the Controller? 
    What I'm doing: using the reference of Controller which I keep in the View 
    c. Model needs some data from the Controller? 
    Still didn't happen but I have no idea how to do correctly 
    d. Model needs some data from the View? 
    What I'm doing: pulling all my hair from my head... 
    e. Controller needs some data from the View? 
    What I'm doing: using the reference of the View which I keep in the Controller 
    f. Controller needs some data from the Model? 
    What I'm doing: using the reference of the Model which I keep in the Controller 
    g. One of FooModel, FooView or FooController needs data from one of BarModel, BarView or BarController? 
    What I'm doing: thinking of jumping from the highest building... 
    
  6. Eventuali suggerimenti su come sapere se ho implementato correttamente MVC? Devo elaborare enormi dati in Model o Controller?

  7. Sto anche utilizzando un DAO, quello che sto facendo è: il mio modello ha un carico MyModel

    ArrayList()

    metodo che crea un'istanza del DAO e restituisce l'ArrayList dei Modelli restituiti dal DAO, quindi a volte elabora questo ArrayList di Modelli nel Modello e talvolta autorizzo il Controller a elaborarlo. È una buona pratica o c'è un modo migliore? Per processo intendo: iterare attraverso ArrayList e ottenere i dati dai modelli.

  8. I Have a PasswordCheck jDialog per limitare l'accesso ad alcune viste.Come posso riutilizzarlo in termini di MVC, in modo che io possa utilizzare la stessa finestra di dialogo di PasswordCheck per consentire/limitare l'accesso a diverse viste senza fare un pasticcio nel codice?

  9. Altri suggerimenti, suggerimenti, idee, suggerimenti?

Contesto: sto necessario per sviluppare un software Java Swing MVC in breve tempo, anche se di default non sono uno sviluppatore Java e non così per implementare il pattern MVC, specialmente in Java (mi viene l'idea ma a volte mi manca conoscenza per implementare la relazione tra le classi). Le applicazioni sono fondamentalmente un monitor per file locali/online con un JTable nel frame principale per mostrare questi dati. Sto usando la nuova API WatchService per tenere traccia dei file locali e salvare le loro informazioni in un database h2 utilizzando un DAO e ricaricare questi dati nel frame jolly principale. Devo anche informare l'utente sui nuovi file (che sto usando TrayIcon). Per il monitoraggio/caricamento/download di file online sto utilizzando HttpsUrlConnection e json. Può anche consentire la personalizzazione delle impostazioni.

Grazie in anticipo per il vostro tempo e aiuto.

risposta

7

Dai un'occhiata allo Sun's (Oracle's) suggestions.

Come una semplificazione, è possibile registrare ciascun componente (modello, vista, controller) con un componente dell'applicazione di livello superiore per fornire un singolo punto di riferimento anziché singoli riferimenti tra ciascun componente (il proprio A o il B). L'articolo che cito fornisce idee per il design push and pull; Suggerirei spingere come un approccio moderno più popolare. Divulgazione: ho esperienza con Java e MVC ma non con MVC in Swing di per sé.

dove dovrei istanziare la vista, il modello e il controller di the SettingsFrame?

Certo, sì, o in un componente dell'applicazione di primo livello.

come dovrei gestire funzioni più specifiche che (apparentemente) Manca una o due delle "gambe" MVC (o Modello o Visualizza o Controller)?

Vorrei implementare i componenti solo della GUI come la propria libreria della GUI. E puramente algoritmo/pezzi di servizio come una libreria di servizi.

Devo elaborare grandi quantità di dati in Model o Controller?

Gli algoritmi di elaborazione dei dati si adattano bene a un controller o addirittura a una libreria di servizi; il tuo modello non dovrebbe fare molta elaborazione al di là della possibile conversione o convalida del tipo di dati.

Come conservare e utilizzare correttamente un oggetto con le impostazioni attraverso l'intera applicazione?

Vedere la mia nota sulla registrazione; un singleton può essere appropriato.

+0

+1, mi piace l'idea presentata tanto quanto mi è piaciuto il collegamento, mi aiuterà anche con i miei sforzi :-) +1 alla domanda pure, molto ben spiegato, sono stato il primo a rinnegare entrambi: -) –

+0

Grazie per la risposta.Cosa intendi per "vedere la mia nota sulla registrazione"? Ho già visto suggerimenti sui soli, ma, dato che l'hai consigliato, lo leggerò di nuovo più attentamente e con attenzione, e cercherò di risolvere i miei dubbi. L'ho anche svalutato. – dcr

+4

+1 Vedi anche questo [esempio] (http://stackoverflow.com/a/3072979/230513), che segue un [schema] (http://stackoverflow.com/a/2687871/230513) simile allo schema citato. – trashgod

Problemi correlati