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.