2009-10-23 2 views
4

Dans mon application WPVM MVVM, mon modèle est un arbre complexe d'objets Modèle qui change constamment au moment de l'exécution. Les instances de modèles vont et viennent au moment de l'exécution, changent leur position dans l'arborescence et bien sur changent leurs nombreuses propriétés. My View est presque une représentation visuelle un-à-un de cet arbre. Chaque instance du modèle est dans 80% des cas également un nœud dans l'arbre.Arborescence ViewModel et mise à jour fréquente Arbre de modèle

Ma question est maintenant comment je voudrais concevoir le ViewModel autour de cela? Mon problème est qu'il y a beaucoup de différents types de modèles avec chacune beaucoup de propriétés. Si je comprenais correctement MVVM, la vue ne devrait pas communiquer directement avec le modèle, ce qui signifierait que je devrais créer un type ViewModel pour chaque type de modèle et que je devrais réemballer chaque propriété du type Model dans le ViewModel.

De même, le ViewModel doit "lier" les changements de propriété du Modèle pour les transmettre à la vue (en utilisant la liaison de données wpf). J'aurais besoin d'une usine qui crée et présente une instance ViewModel pour chaque modèle qui apparaît à nouveau et je devrais disposer chaque instance ViewModel lorsque le modèle correspondant disparaît. Je finis par garder une trace de toutes les instances que j'ai créées. Il est incroyable combien de code de gonflement est généré pour ce double emballage. Est-ce vraiment une bonne approche? Chaque entité et chaque propriété plus ou moins existe deux fois et j'ai beaucoup de code supplémentaire en gardant Model et View synchronisés. Comment gérez-vous cela? Y a-t-il une manière plus intelligente de résoudre ceci?

Quelqu'un at-il une implémentation de référence/d'échantillon pour cela qui le fait mieux que moi?

Répondre

9

Je pense que vous pouvez tomber dans le piège du paradigme si vous suivez ce chemin. MVVM n'est rien de plus qu'un patron, ce qui simplifie le développement dans le monde WPF. Si ce n'est pas le cas, ne l'utilisez pas ou ne modifiez pas votre approche. Je ne passerais pas 80% de mon temps à cocher le champ "Using MVVM".

Revenons maintenant à votre question. Corrigez-moi si je me trompe, mais il semble que vous regardiez MVVM de la direction opposée: vous n'avez pas besoin Modèle à ViewModel correspondance one-to-one. Habituellement, vous créez d'abord des ViewModels en fonction de votre vue, et seulement ensuite sur un modèle.

Généralement vous regardez sur une maquette d'écran des concepteurs graphiques, et créez le ViewModel correspondant, qui prend tous les champs nécessaires du modèle, enveloppe/modifie/formate/les combine pour rendre le développement de vue aussi facile que possible.

Vous avez dit que votre vue est une représentation visuelle presque un-à-un du modèle. Dans ce cas, il peut être judicieux de créer un ViewModel très simple qui expose l'objet racine de votre arbre-modèle, et laisse View utiliser directement le modèle via cette propriété. Ensuite, si vous avez besoin de certains traitements de personnalisation ou de commandes de vue, vous pouvez le déléguer à ViewModel.

Désolé pour une réponse très vague. Peut-être que si vous posez une question plus spécifique, nous pourrions dissiper la confusion:) ...

+0

+1 Réponse très complète et bonne suggestion de ne pas prendre un paradigme trop littéralement. –

+0

+1 pour "Habituellement, vous créez d'abord des ViewModels en fonction de votre View, et seulement ensuite sur un Model *" – Amsakanna

Questions connexes