programmazione GUI - chi dovrebbe essere un proprietario

1

Non so nulla della programmazione della GUI. Cerco di imparare. Ho una domanda semplice ...

Ad esempio, ho un piccolo programma. Ho una classe che estende JFrame con la finestra principale (MyWindowClass) e la mia classe "logica" (MyClass) che fanno qualcosa (ad esempio, calcola qualcosa e voglio visualizzarlo nella finestra).

Devo implementarlo in questo modo:

class MyClass {
    // ...
    // ...
    MyWindowClass window;
};

O come questo:

class MyWindowClass extends JFrame {
   // ...
   MyClass c;
};

Non so quale classe dovrebbe essere un proprietario e quale classe dovrebbe avere il metodo principale ...

Per favore aiutami ...

Cerco di scrivere in Java (Swing) ma questa è una domanda generale, credo.

    
posta pawell55555 16.12.2013 - 21:18
fonte

3 risposte

3

Tra le due opzioni con la vista conoscere la tua classe "logica" sarebbe il metodo migliore. Ciò ti consentirebbe di creare o modificare la tua vista senza dover modificare le tue classi logiche. Se metti la tua visione all'interno delle tue classi "logiche", limita notevolmente la tua flessibilità.

Poiché le persone menzionate nei commenti leggono sul pattern MVC in quanto dimostreranno alcune soluzioni ideali.

    
risposta data 16.12.2013 - 21:23
fonte
1

Domanda classica Model-View-Controller.

MyClass è un modello. Ha i dati del dominio e implementa la logica del dominio.

I componenti SWING ( JTextField , JTable ) sono una vista. Sanno come mostrare i dati all'utente e come accettare l'input dell'utente, ma non sanno nulla del tuo modello di dominio.

MyWindowClass è un controller. È necessario mediare il modello e la vista, ad es. imposta il valore del campo di testo sul valore della proprietà dell'oggetto o aggiorna l'oggetto in risposta alla pressione del pulsante.

Quindi, MyWindowClass deve essere in grado di accedere sia al modello che alla vista. C'è poco motivo per MyClass di conoscere l'interfaccia utente - ad es. puoi utilizzare la stessa classe di dominio nell'interfaccia utente diversa (ad esempio elenco di oggetti e modulo di modifica per un singolo oggetto).

    
risposta data 16.12.2013 - 22:46
fonte
0

Idealmente, non la tua classe logica o la tua classe finestra contengono l'altra, ma dovrebbero invece usare un oggetto "applicazione" per contenerle entrambe.

Tuttavia, se per qualche ragione non è pratico, la scelta di quale oggetto contenga l'altro quando entrambi gli oggetti provengono da aree di interesse completamente differenti dovrebbe essere determinato da quale oggetto dipende dall'altro. Se MyWindowClass esegue mai senza un oggetto MyClass , può contenere un membro; se MyClass eseguirà mai senza MyWindowClass , potrebbe invece contenere tale.

(Anche se questa dovrebbe essere una preoccupazione solo quando la progettazione complessiva dell'applicazione non consente una separazione appropriata, che è un'istanza che si verifica sempre meno frequentemente man mano che le lingue e i framework si sono evoluti dai vecchi tempi).

Per inciso, se sei costretto a prendere una decisione contro le preoccupazioni, assicurati di mantenere i riferimenti il più generici possibile. Vuoi essere in grado di sostituire un MyModifiedClass per MyClass in MyWindowClass con un minimo di confusione in fondo alla strada.

    
risposta data 16.12.2013 - 22:41
fonte

Leggi altre domande sui tag