2010-06-21 4 views
0

J'ai une grande collection d'objets MyFile qui sont liés de toutes sortes de façons, comme les spaghettis. En outre, à partir de cette collection, je crée des sous-collections plus petites de certains éléments qui sont égaux selon certains critères. (par exemple tous les fichiers avec l'extension .txt, tous les fichiers qui appartiennent à certain répertoire etc ...)Structure de données complexe dans la couche ViewModel du MVVM

Fondamentalement, j'ai une structure complexe de listes liées dans ma logique métier. Maintenant, je veux créer ViewModel pour ce afin de le préparer pour View et c'est là que je frappe le mur. Je ne peux pas comprendre comment préparer ce désordre et toujours garder tout efficace et organisé.

Le premier problème est que l'emballage chaque collection collectionViewModel en dénombrant point par point et la création itemViewModel créera double itemViewModel pour chaque élément (depuis un élément peut être contenu dans plusieurs collections)

Le deuxième problème est de savoir comment garder tout mis à jour? Si, par exemple, un item1 dans la logique métier change sa référence de item2 en item3, alors ViewModels doit les mettre à jour en conséquence. Je suis vraiment tenté de rompre avec le pattern MVVM ici même si je ne le veux pas, et de mettre bussines + logique de présentation dans un objet/classe car cette structure spaghetti me semble un peu trop pour mon niveau de compréhension de MVVM .

Merci

Répondre

0

Peut-être que je suis aboyer le mauvais arbre ici, mais voilà.

Vous pouvez avoir un modèle qui agit comme un référentiel pour tous vos objets fichier, et qui expose également un événement ItemAdded et ItemRemoved, plus une méthode de requête. Vous pouvez alors avoir un type ViewModel commun qui représente votre vue sur ce modèle (un ViewModel), mais se spécialise en composant une requête. De cette manière, vous pouvez avoir une instance ViewModel + Query (par exemple, tous les fichiers avec l'extension txt) pour chaque vue que vous devez représenter. Le ViewModel serait responsable de l'exécution de la requête sur votre modèle (en appelant la méthode de requête), puis de transformer les résultats en une collection observable d'éléments de fichier (ou what-have-you). Vous pouvez mettre à jour votre ViewModel en réponse aux modifications du modèle en vous abonnant aux événements ItemAdded et ItemRemoved. Si dans un événement ItemRemoved votre collection d'éléments de fichier ViewModel contient l'élément, supprimez-le. Si, dans un événement ItemAdded, l'élément correspond à la condition de requête pour cette instance ViewModel, ajoutez-le à la collection. Cela vous permet d'avoir un seul modèle pour tous vos fichiers, puis une instance ViewModel (+ requête) pour chaque type de vue que vous souhaitez représenter. L'événement ItemAdded et ItemRemoved vous permettent de mettre à jour votre ViewModel. Comme les éléments des ViewModels sont des collections observables, vos vues de bases de données se mettent à jour automatiquement.

Questions connexes