Esta va a ser una pregunta genérica.Organizar una aplicación GUI
Tengo dificultades para diseñar una aplicación GUI, especialmente. al tratar con las interacciones entre las diferentes partes.
No sé cómo debo lidiar con el estado compartido. Por un lado, el estado compartido es malo, y las cosas deberían ser tan explícitas como sea posible. Por otro lado, no tener estado compartido introduce un acoplamiento no deseado entre los componentes.
Un ejemplo:
Quiero que mi solicitud sea extensible en una especie de Emacs/Vim de paso, a través de scripts. Claramente, algún tipo de estado compartido necesita ser modificado, para que la GUI lo use. Mi plan inicial era tener una "sesión" global accesible desde cualquier lugar, pero no estoy tan seguro de eso.
Una caso de uso complicado es la fijación de teclas. Quiero que el usuario pueda especificar combinaciones de teclas personalizadas a partir de un script. Cada combinación de teclas se correlaciona con un comando arbitrario, que recibe la sesión como único argumento.
Ahora, el componente del editor captura las pulsaciones de teclas. Tiene que tener acceso a las asignaciones de teclas, que son por sesión, por lo que necesita acceso a la sesión. ¿Es buena idea asociar el editor a la sesión? Otros componentes también necesitarán acceder a las combinaciones de teclas, por lo que ahora la sesión se comparte y puede ser un singleton ...
¿Hay alguna buena lectura sobre el diseño de aplicaciones GUI que vaya más allá de MVC?
Esto es Python y wxPython, FWIW.
[EDITAR]: Se agregó el uso de concreto.