java - programacion - ¿La mejor manera para que una GUI de Swing se comunique con la lógica de dominio?
programacion en java con interfaz grafica (3)
Tengo una lógica de dominio implementada en varios POJO. Quiero escribir una interfaz de usuario Swing para permitir al usuario iniciar y ver los resultados de varias acciones de dominio.
¿Cuál es el mejor patrón / marco / biblioteca para las comunicaciones entre la interfaz de usuario y el dominio? Esto se reduce a:
- la interfaz de usuario puede convertir un gesto de usuario en una acción de dominio
- el dominio puede enviar información de estado / resultado a la interfaz de usuario para fines de visualización
Soy consciente de MVC como un concepto amplio y he jugueteado con el patrón Observer (cuya implementación Java tiene algunos inconvenientes si entiendo correctamente), pero me pregunto si hay una mejor práctica aceptada para este problema.
Definitivamente MVC - algo así como este ejemplo que claramente divide las cosas. El problema con los ejemplos de Swing es que parecen mostrar el MVC funcionando dentro del swing, lo que no me parece correcto
He utilizado el patrón Observer (usando AspectJ magic) en el pasado con cierto éxito, pero descubrí que, a menos que tuviera cuidado, se convertía rápidamente en un clúster ... ¿uhh ... flick?
Rápidamente se volvió difícil de administrar y, lo que es más importante, extremadamente difícil de depurar.
Editar:
Para ampliar ligeramente mi respuesta, estábamos usando SWT , no Swing, así que YMMV. Básicamente, utilizamos AspectJ para conectar la transferencia de datos de los componentes de la interfaz de usuario a los objetos del modelo. Estos objetos modelo eran POJOs tontos.
La lógica comercial real se hizo "observando" los objetos del modelo con AspectJ y disparando el evento requerido si cambiaban. Entonces, si cambiaras un valor en un cuadro de texto, AspectJ dispararía y copiaría ese valor en un POJO. Si ese campo en el POJO tuviera un evento para la lógica de negocios que luego se activaría. Si esa lógica modificara cualquier POJO (y podría) AspectJ notaría y copiaría el valor del POJO en el componente UI.
MVC es fantástico para un artilugio individual, sin embargo se torna un poco rebelde cuando tienes pages
y forms
con muchos widgets.
Una cosa que podría valer la pena estudiar (y no la estoy respaldando, no la he usado en realidad, simplemente implementé algo muy similar para mí) es el Framework Bans Binding (JSR295 )