2009-03-09 5 views
0

Je travaille sur une interface graphique MVC/MVP pour éditer un document. Le document a une structure arborescente, certains nœuds représentant du texte, d'autres des images. Le modèle d'application inclut également une pile de commandes, avec des commandes fonctionnant directement sur le modèle.Quels sont les modèles de création de vues et de contrôleurs dans une application MVC ou MVP?

Étant donné que différents nœuds ont des contrôles radicalement différents, je prévois d'implémenter des triades MVC/MVP individuelles pour chaque nœud. Là où je suis en difficulté est de savoir comment synchroniser la création et la destruction des composants V et C par les pairs.

Mes idées:
- écouter sur chaque nœud pour les événements de type « childAdded », puis créer des pairs en fonction de ces événements
- utiliser une usine pour créer des noeuds dans le modèle, et ont cette usine créer les pairs

Quels sont les modèles courants ou les meilleures pratiques pour la génération de vues/contrôleurs dynamiques?

Répondre

1

Je recommande regarder quelques-uns des modèles d'interface utilisateur à ce site

Quant à votre question, je ferais la

suivant la forme montrant les noeuds mettrait en œuvre une interface INodeView

Une méthode de l'interface INodeTreeForm serait la possibilité d'ajouter un nœud individuel. Ce serait passer une classe de noeud créée dans l'objet NodeTreeScreen. Il y aura deux propriétés clés. Le premier est la clé du nœud, et le second est le type de nœud.

Vous devez ajouter le noeud de telle sorte qu'il existe un champ sur le contrôle qui a la clé.

Avec l'interface INodeTreeForm, vous disposez d'une interface INodeView. Cela couvrirait la zone de vue ou le nouveau formulaire que vous allez changer aussi.

Lorsque vous cliquez sur le nœud, il transmet la clé à NodeTreeScreen qui a tendance à regarder quel type de nœud il est. Il a une collection d'objets INodeView. L'une des propriétés de INodeView sera le type de nœud.

Vous récupérez le bon INodeView. Vous fermez le INodeview actuel, définissez le INodeView actuel à celui que vous avez récupéré, passez-le le noeud, et dites-lui de se montrer.

Vous avez le choix de ce que fera INodeView. Vous pouvez avoir un formulaire/contrôle enregistré pour chacun des différents types. Par exemple un INodeViewText, INodeViewImage, etc. Ou juste un omnibus INodeViewForm et laissez l'objet implémentant INodeView s'occuper du dessin réel. En fonction de votre boîte à outils graphique, cela peut signifier qu'un formulaire peut implémenter un grand nombre d'interfaces différentes. En ce qui concerne l'ajout, la suppression et la création de nœuds, cela se ferait par l'intermédiaire de l'interaction entre le formulaire implémentant INodeTreeForm et NodeTreeScreen. Parmi les choses que cela va faire est l'exécution des commandes que vous avez déjà créées pour modifier le modèle. En implémentant tout ce qui se trouve derrière une interface, vous pouvez changer l'implémentation sans vider le reste du logiciel. L'objet implémentant les différentes interfaces peut changer sans impact sur les autres objets tant qu'ils continuent à implémenter correctement les interfaces.

Ceci est une variante de Passive View sur le site de Martin Fowler.

Questions connexes