Question

Je travaille sur une interface graphique MVC / MVP pour modifier un document. Le document a une structure arborescente, certains nœuds représentant du texte, d'autres des images. Le modèle d'application comprend également une pile de commandes, avec des commandes opérant directement sur le modèle.

Étant donné que les 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. Ce qui me pose problème, c'est comment synchroniser la création et la destruction des composants V et C des homologues.

Mes idées:
- Écoutez sur chaque nœud pour " childAdded " tapez des événements, puis créez des pairs en fonction de ces événements
- utiliser une fabrique pour créer des noeuds dans le modèle et faire en sorte que cette fabrique crée également les homologues

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

Était-ce utile?

La solution

Je vous recommande de consulter certains modèles d'interface utilisateur sur ce site

.

En ce qui concerne votre question spécifique, je ferais ce qui suit

Le formulaire affichant les nœuds implémenterait une interface INodeView

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

Vous ajouteriez le nœud de telle sorte qu'il y ait un champ sur le contrôle qui a la clé.

Parallèlement à l'interface INodeTreeForm, vous disposez d'une interface INodeView. Cela couvrirait la zone d'affichage ou le nouveau formulaire que vous basculerez également.

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

Vous récupérez le bon INodeView. Vous fermez le INodeview actuel, définissez le INodeView actuel sur celui que vous avez récupéré, transmettez-le au nœud et dites-lui de s’afficher lui-même.

Vous avez le choix entre ce que INodeView parlera. Vous pouvez avoir un formulaire / contrôle enregistré pour chacun des différents types. Par exemple, un INodeViewText, INodeViewImage, etc. Ou simplement un omnibus INodeViewForm et laissez l’objet implémentant INodeView s’occuper du dessin proprement dit.

En fonction de votre boîte à outils graphique, cela pourrait signifier qu'un formulaire implémenterait de nombreuses interfaces différentes.

En ce qui concerne l'ajout, la suppression et la création de nœuds, cela se ferait via l'interaction entre le formulaire implémentant INodeTreeForm et NodeTreeScreen. Cela implique notamment l'exécution des commandes que vous avez déjà créées pour modifier le modèle.

En implémentant tout derrière une interface, vous pouvez modifier l’implémentation sans visser le reste du logiciel. L'objet implémentant les différentes interfaces peut changer sans affecter les autres objets tant qu'ils continuent d'implémenter correctement les interfaces.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top