Je travaille actuellement sur quel sera mon premier véritable incursion à utiliser MVVM et lisez divers articles sur la meilleure façon de la mettre en œuvre. P>
Mes pensées actuelles doivent utiliser mes modèles de données efficacement comme des objets de transfert de données, les rendre sérialisables et les avoir existent sur les côtés du client et du serveur. Cela semble être une étape logique donnée que les deux types d'objets ne sont vraiment que des collections de getters et de setters de propriété et une autre couche entre les deux semble être une overkill complète. P>
Évidemment, il y aurait des problèmes avec InotinyPropertychangned ne fonctionnant pas correctement du côté serveur, car il n'y a pas de vue de vue à laquelle communiquer, mais aussi longtemps que nous sommes prudents de construire nos objets de modèle de domaine appropriés à partir de modèles de données dans la couche de service et non Tant que les modèles de données du côté serveur, je ne pense pas que ce soit un gros problème. P>
Je n'ai pas trouvé trop d'informations sur cette approche dans ma lecture, alors j'aimerais savoir si c'est une jolie chose standard, est-ce que cela vient d'être supposé être la manière de fait de faire MVVM dans un multi-niveau environnement? Si j'ai complètement la mauvaise idée des choses, des réflexions sur d'autres approches seraient également appréciées. P>
3 Réponses :
Je ne suis pas expert à ce sujet. J'avais juste le même scénario. Je suis d'accord avec vous que c'est une tropilleuse. J'utilise cette solution depuis un certain temps et je n'ai rencontré aucun problème. L'INOTICYPROPERTYCHANGED n'est pas un gros problème pour moi puisque rien sur le côté serveur vous abonnera à l'événement de l'état de propriété. Si vous utilisez l'héritage sur vos modèles de données, tous doivent être sérialisables. Dans mon scénario, j'ai deux classes de base pour mes modèles de données: une qui est utilisée pour le transfert de données et l'autre non. P>
Merci, il semble qu'il n'y ait pas de consensus défini réel pour le moment. Étant donné que vous avez fait une chose semblable auparavant sans problème, je n'accepterai celui-ci comme réponse.
Vous pouvez utiliser n'importe quel modèle que vous vous sentez à l'aise, oui toutes vos propriétés nécessiteront un comportement à l'encontre d'inotifyPropertyChanged. Comment cela affectera la couche de service est entièrement bas à votre mise en œuvre.
Je suppose que vous vous trouvez que vous attachez à votre DTO à votre avis? P>
Comment je vois qu'il y a un incompatibilité entre les couches de l'application, c'est votre Le modèle de domaine semble probablement similiaire à votre modèle relationnel, avec des différences subtiles mais cruciales. Il y a aussi Une inadéquation entre le modèle de domaine et votre DTO (objets peut être aplatie, des propriétés calculées, etc.). Il est tentant de se lier directement aux DTO, car ils sont probablement conçus pour avoir ce dont vous avez besoin pour l'opération particulière, mais il existe également une inadéquation d'impédance entre le DTO et ce qui est nécessaire à la vue afin de pouvoir obtenir le résultat désigré. C'est ici que le modèle de vue entre en place. Le modèle de vue a la responsabilité de proxyer les propriétés DTO à la vue, il est chargé de laisser la vue savoir s'il y a des erreurs de validation et des ordres des itinéraires vers le gestionnaire approprié (sauvegarder, supprimer, etc. , ...). P>
J'ai tendance à régler les choses de la manière suivante: p> Votre éditionAddrapsview se lierait alors à l'éditionAddressviewModel. Fondamentalement, la règle est que tout votre comportement de l'interface utilisateur devrait être exprimé en termes de modèle de vue. P> Oui cela signifie un travail supplémentaire, HOperver Il y a des choses que vous pouvez faire pour simplifier les choses un peu (génération de code, etc.). Je travaille en fait sur une bibliothèque qui vise à simplifier le processus de MVVM entier à l'aide d'une API fluide. Vérifiez-le à http://fluentviewmodel.codeplex.com/ p> p>
J'ai décidé d'avoir un "modèle" de propriété sur mon point de vue. Dans le modèle lui-même, j'ai déjà implémenté IpropertyNotifyChanged et IdataertRorinfo. Dans mon point de vue, je saute ainsi les propriétés où le code serait simplement "tomber" au modèle. Au lieu de cela, la vue se lie directement au modèle pour ces propriétés. P>
Pour des cas plus compliqués, où je dois ajuster les données dans le modèle pour s'adapter à la vue, je le fais dans la vue. En outre, les commandes, etc. sont dans la fenêtre de vue. Mais je ne vois pas la raison pour que le code de la chaudron dans la vue, répéter les mêmes choses que j'ai déjà dans le modèle. P>