Im tratando de refactorizar mi solicitud (con más de 1000 líneas de código GUI) a un patrón de estilo MVC. El código lógico ya está separado de la GUI, por lo que no hay problema. Mi preocupación es la separación de la vista desde el controlador. Entiendo el principio básico de la MVC y this tutorial en el wiki wxpython ha sido muy servicial pero el ejemplo de código es un poco simplista y me deja con dudas cuando intento de aplicar el principio de mi propio proyecto, que es un poco más compleja.Re-factoring patrón MVC -Doubts en la separación de vista desde el controlador de
Un fragmento de la estructura ..
I tienen una MainWindow
con un número de widgets incluyendo una (sección de pestañas) noteBook
, el portátil tiene un número de pestañas una de las pestañas (que me llamo FilterTab
) posee dos instancias de una clase (que yo llamo un FilterPanel
) que es un panel con un cuadro de lista , tres botones, uno para borrar, uno para eliminar y uno para agregar elementos a/de la lista . Dependiendo de banderas pasaron a la clase en el caso de instancias botones añaden puede crear diferentes tipos de cuadros de diálogo, por ejemplo, un diálogo de entrada de texto o directoryPicker etc ..
Eso es sólo una parte de la interfaz gráfica de usuario que es bastante capas controladores de eventos -con enterrado en la clase FilterPanel.
Si tuviera que convertir esa parte a MVC tendría que vincular los eventos de botón para cada instancia de FilterPanel en mi controlador (en lugar de en la clase filterPanel) -en este caso hay dos (instancias de filterPanel)
por lo que tendría algo como esto para cada botón, (3 botones por filterPanel * número de instancias del panel), además de los manipuladores ..
self.mainWindow.filterTab.dirFilterPnl.Bind(wx.EVT_BUTTON,
self.onAdd_dirFilterPnl,
self.mainWindow.filterTab.dirFilterPnl.addBtn,
self.mainWindow.filterTab.dirFilterPnl.addBtn.GetId()
)
que añade una gran cantidad de código extra, (el doble de la cantidad de eventos manipuladores si tengo solamente dos casos filterPanel)
Así que me gustaría saber si estoy tomando el enfoque correcto?
Excelente respuesta que ha corregido mi punto de vista que estaba obsesivamente obsesionado con la eliminación de todas las encuadernaciones de eventos de la vista, lo cual no solo es impráctico sino también imposible. He desarrollado widgets compuestos ricos antes, así que no hay problema (usando wx.NewEventType, wx.PyEventBinder, wx.PyCommandEvent para tomar eventos como usted sugirió), por qué no pensé en esto porque este problema fue probablemente debido nuevamente a la fijación mencionada. Gracias de nuevo por la esclarecedora respuesta – volting
Sin embargo, una última duda (con suerte) con respecto al cuadro de lista, al agregar solo elementos únicos, ¿se consideraría una decisión semántica? – volting
@volting, eres bienvenido!Mostrar cada elemento solo una vez en el cuadro de lista, tanto como (por ejemplo) si mostrar los elementos en el orden en que se agregaron o en algún orden ordenado, son cosas que normalmente clasificaría como decisiones visuales: no hay una decisión difícil y rápida. criterio, pero me parece que es esencialmente una decisión sobre "cómo mostrar" cosas al usuario, en lugar de "qué acciones semánticas realizar". –