Sto tentando di ridefinire la mia applicazione (con più di 1000 linee di codice GUI) su un pattern in stile MVC. Il codice logico è già separato dalla GUI, quindi non è un problema. La mia preoccupazione è la separazione della vista dal controller. Capisco che il principio di base di MVC e this tutorial nel wiki wxpython sia stato molto utile, ma l'esempio di codice è un po 'semplicistico e mi lascia dubbi quando provo ad applicare il principio al mio progetto, che è un po' più complesso.Ri-factoring in pattern MVC: dubbi sulla separazione della vista dal controller
Un frammento di struttura ..
Ho un MainWindow
con un numero di widget tra cui una (sezione schede) noteBook
, il notebook ha un numero di linguette una delle schede (che chiamo FilterTab
) contiene due istanze di una classe (che io chiamo un FilterPanel
), che è un pannello con una listbox, tre pulsanti, uno per cancellare, uno a rimuovere e uno per aggiungere elementi alla/dalla lista . A seconda dei flag passati alla creazione di istanze, gli eventi di aggiunta possono creare diversi tipi di finestre di dialogo, ad esempio una finestra di dialogo di testo o directoryPicker ecc.
Questa è solo una parte della GUI che è abbastanza stratificata con i gestori di eventi sepolto nella classe FilterPanel.
Se dovessi convertire quella parte di MVC avrei dovuto legare gli eventi dei pulsanti per ogni istanza del FilterPanel nel mio controller (invece che nella classe filterPanel) -in questo caso ci sono due (istanze filterPanel)
quindi vorrei avere qualcosa di simile per ogni pulsante, (3 tasti per filterPanel * numero di istanze del pannello) più i gestori ..
self.mainWindow.filterTab.dirFilterPnl.Bind(wx.EVT_BUTTON,
self.onAdd_dirFilterPnl,
self.mainWindow.filterTab.dirFilterPnl.addBtn,
self.mainWindow.filterTab.dirFilterPnl.addBtn.GetId()
)
che aggiunge un sacco di codice extra, (il doppio della quantità di evento gestori se ho solo due istanze filterPanel)
Quindi mi piacerebbe sapere sto prendendo il giusto approccio?
Risposta eccellente che ha corretto la mia prospettiva che era fissata in modo malsano sulla rimozione di tutti i collegamenti degli eventi dalla vista, che non è solo impraticabile ma a un livello fondamentale impossibile. Ho sviluppato ricchi widget compositi prima quindi non è un problema (usando wx.NewEventType, wx.PyEventBinder, wx.PyCommandEvent per prendere degli eventi come suggerivi), perché non ci avevo pensato per questo problema era probabilmente ancora dovuto alla fissazione di cui sopra. Grazie ancora per la risposta illuminante – volting
Un ultimo dubbio (se tutto va bene) riguardo alla casella di riepilogo, aggiungendo solo elementi unici, sarebbe considerato una decisione semantica? – volting
@volting, prego!Mostrare ogni elemento solo una volta nella lista, tanto quanto (dire) se mostrare gli articoli nell'ordine in cui sono stati aggiunti o in qualche ordine ordinato, sono cose che classificherei normalmente come decisioni visive - non c'è una decisione difficile e veloce criterio, ma mi sembra essenzialmente una decisione su "come mostrare" le cose all'utente, al contrario di "quali azioni semantiche eseguire". –