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?
+1 Réponse très complète et bonne suggestion de ne pas prendre un paradigme trop littéralement. –
+1 pour "Habituellement, vous créez d'abord des ViewModels en fonction de votre View, et seulement ensuite sur un Model *" – Amsakanna