MVC sembra creare dipendenze che solo "non mi sembrano giuste"

3

Potrei essere fraintendere MVC, quindi perdonami se è così.

Questa è la mia struttura del programma (Java / Swing): ho un JTable (View) a cui è indirizzato un elenco collegato personalizzato (Modello). Quando l'utente tenta di aggiungere qualcosa a JTable, il listener di azioni (Controller) aggiorna l'elenco collegato (Modello) che aggiorna JTable (Visualizza).

Ecco il mio problema: l'elenco collegato dovrebbe essere in grado di funzionare indipendentemente da JTable, ma non è così. Diciamo che ho deciso di sbarazzarmi dell'interfaccia utente e di usare semplicemente l'elenco collegato per le cose interne all'interno del programma (l'elenco collegato ha altre proprietà e funzioni al di fuori dell'ambito di MVC). Dovrebbe essere in grado di funzionare, perché la FUNZIONE della lista collegata è indipendente dalla funzione di JTable, tuttavia dovrei modificare un sacco di codice per farlo (o avere un mucchio di codice che non fa più nulla) a causa di MVC.

Quindi sto fraintendendo completamente MVC, solo un po ', o le dipendenze sono un prezzo che devo pagare?

NOTA: Questa è una vista semplificata del mio progetto. Nella vita reale, ci sono altri oggetti nel modello e più di un semplice JTable nella mia interfaccia. Inoltre, l'elenco collegato ha altri marchi che ottengono aggiornamenti diversi dal numero di oggetti.

    
posta sinθ 06.06.2013 - 21:59
fonte

3 risposte

7

Sembra che tu abbia la dipendenza tra il tuo Modello e la tua Vista nel modo sbagliato. Un modello non sa dell'esistenza di una vista , al più il modello sa che alcuni altri componenti del sistema potrebbero desiderare di conoscere le modifiche al modello.

Nel modello MVC, il Controller informa la vista che dovrebbe aggiornarsi da solo, oppure la vista chiede al modello di notificarlo in merito alle modifiche. In quest'ultimo caso, la comunicazione dal modello alla vista passa attraverso un meccanismo generico che consente una comunicazione one-to-many senza che il modello conosca (o si preoccupa) su quanti e quali componenti con cui parla. Questo meccanismo è in genere un meccanismo di eventi o un'implementazione del pattern Observer.

    
risposta data 07.06.2013 - 09:20
fonte
1

Un modello è indipendente dalla vista , quindi i tuoi sentimenti ti stanno indirizzando nella giusta direzione.

Il controller decide, quale modello e quale vista usare. Inietta il modello nella vista e, facoltativamente, registra la vista come Observer per il modello. Quindi il controller passa il controllo alla vista.

Quindi il modello viene modificato dal controller, solitamente invocato da un evento nella vista. Se si utilizza il pattern Observer, il modello notifica direttamente la vista, che si ricompone senza ulteriori interazioni con il controller, altrimenti il controller restituisce il controllo alla vista.

    
risposta data 07.06.2013 - 03:29
fonte
0

Il modo in cui ho affrontato questo problema è di avere i dati nella raccolta di base (un elenco collegato nel tuo caso) come modello di dati reali. Quindi crea un'istanza TableModel che è un involucro sottile attorno al modello dati. La tua vista e il tuo controller non devono essere modificati.

In questo modo, se non hai più bisogno dell'interfaccia utente, puoi comunque lavorare direttamente con l'elenco collegato. Oppure, se ti viene in mente un modo diverso di rappresentare gli stessi dati, potresti creare un diverso TableModel per corrispondere a questa nuova vista, ma continuare a utilizzare lo stesso modello di dati di supporto.

    
risposta data 06.06.2013 - 22:13
fonte

Leggi altre domande sui tag