Come gestire le notifiche su più viste parziali dello stesso modello?

0

Sto lavorando al refactoring di una vecchia simulazione di una macchina di Turing.

L'applicazione utilizza una classe che contiene lo stato e la logica dell'esecuzione del programma e diversi pannelli per visualizzare la rappresentazione del nastro e mostrare lo stato, i messaggi e i controlli della GUI (avvio, arresto, elenco programmi, ...) .

Mi piacerebbe refactoring usando l'architettura MVC che non è stata usata originariamente: il Frame è l'unico modo per accedere ai diversi pannelli e c'è anche un strong accoppiamento tra la classe "engine" e gli aggiornamenti della GUI in la via di frame.displayPanel.state.setText("halted"); o frame.outputPanel.messages.append("some thing");

Mi sembra che dovrei inserire il codice relativo allo stato in una classe di modello osservabile e rendere i diversi pannelli osservatori.

Il mio problema è che la classe java Observable fornisce solo una notifica globale agli Observers, mentre preferirei non aggiornare ogni Observer ogni volta, ma solo quando la parte che osservo specificatamente è cambiata.

  • Sto pensando di implementare me stesso diversi vettori di ascoltatori (per lo stato / posizione, per i messaggi di output, ...) ma ho voglia di reinventare la ruota.
  • Ho pensato anche ad aggiungere alcuni flag che gli osservatori potrebbero controllare come isNewMessageAvailable() , hasTapeMoved() , ecc. ma suona anche il design approssimativo.

BTW, è giusto mantenere il ciclo fetch / execute nel modello o dovrei spostarlo in un altro posto? Possiamo pensare in modo teoricamente ideale mentre sto completamente rinnovando questa piccola applicazione.

    
posta Seki 30.11.2012 - 13:10
fonte

2 risposte

0

Ho scelto come suggerito da @ALJIMohamed di indirizzare le diverse visualizzazioni tramite elenchi diversi di listener e di generare eventi diversi per i componenti della vista che sono stati registrati dal controller.

È necessario definire diverse interfacce EventObject e EventListener , ma ritengo sia meglio che rendere semplici osservatori a tutte le visualizzazioni.

    
risposta data 13.12.2012 - 11:52
fonte
1

le classi java Observable / Observer consentono di aggiungere un oggetto per passare al metodo di aggiornamento degli osservatori. Puoi quindi usarlo per differenziare ciò che è cambiato (purtroppo nessuna versione generica)

    
risposta data 30.11.2012 - 13:29
fonte

Leggi altre domande sui tag