Pregunta

Estoy trabajando en una GUI MVC / MVP para editar un documento. El documento tiene una estructura de árbol, con algunos nodos que representan texto, otras imágenes. El modelo de la aplicación también incluye una pila de comandos, con comandos que operan directamente en el modelo.

Dado que los diferentes nodos tienen controles radicalmente diferentes, planeo implementar tríadas MVC / MVP individuales para cada nodo. Donde me encuentro con problemas es cómo sincronizar la creación y la destrucción de los componentes pares V y C.

Mis ideas:
- escuche en cada nodo '' childAdded '' escribir eventos y luego crear pares basados ??en esos eventos
- use una fábrica para crear nodos en el modelo, y haga que esa fábrica también cree los pares

¿Cuáles son algunos patrones comunes o mejores prácticas para la generación dinámica de vista / controlador?

¿Fue útil?

Solución

Recomiendo mirar algunos de los patrones de IU en este sitio

En cuanto a su pregunta específica, haría lo siguiente

El formulario que muestra los nodos implementaría una interfaz INodeView

Un método de la interfaz INodeTreeForm sería la capacidad de agregar un nodo individual. Estaría pasando una clase Node creada en el objeto NodeTreeScreen. Habrá dos propiedades clave. La primera es la clave del nodo, y la segunda es el tipo de nodo.

Agregaría el nodo de tal manera que haya un campo en el control que tenga la clave.

Junto con la interfaz INodeTreeForm, tendría una interfaz INodeView. Esto cubriría el área de visualización o el nuevo formulario que también cambiará.

Cuando hace clic en el nodo, pasa la clave a NodeTreeScreen, que tiende a ver qué tipo de nodo es. Tiene una colección de objetos INodeView. Una de las propiedades de INodeView será qué tipo de nodo es.

Recuperas el INodeView correcto. Cierra el INodeview actual, establece el INodeView actual en el que recuperó, pasa el nodo y le dice que se muestre.

Puede elegir qué hará INodeView hablar. Puede tener un formulario / control registrado para cada uno de los diferentes tipos. Por ejemplo, un INodeViewText, INodeViewImage, etc. O simplemente un INodeViewForm omnibus y dejar que el objeto que implementa INodeView se encargue del dibujo real.

Dependiendo de su kit de herramientas GUI, esto podría significar que un formulario podría estar implementando muchas interfaces diferentes.

En cuanto a agregar, eliminar y crear nodos, esto se haría a través de la interacción entre el formulario que implementa INodeTreeForm y NodeTreeScreen. Entre las cosas que esto hará será ejecutar los comandos que ya creó para modificar el modelo.

Al implementar todo lo que hay detrás de una interfaz, puede cambiar la implementación sin arruinar el resto del software. El objeto que implementa las diferentes interfaces puede cambiar sin afectar a los otros objetos siempre que continúen implementando las interfaces correctamente.

Esta es una variante de la Vista pasiva en el sitio de Martin Fowler.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top