/ / Le rôle du modèle dans MVVM - c #, .net, wpf, mvvm

Le rôle du modèle dans MVVM - c #, .net, wpf, mvvm

J'ai lu quelques articles sur le rôle du modèle (de données) dans le modèle MVVM. Cependant, je ne pouvais toujours pas comprendre ce qui entre dans le modèle.

Le modèle doit-il implémenter INotifyPropertyChanged? Si oui, quelle est la différence entre la machine virtuelle et le modèle?

Sinon, une modification du modèle ne notifiera pas leVM et la vue qu'il s'est produite. Donc, si l’on considère que la logique entre dans le modèle, il semble évident qu’il devrait informer le ViewModel de certains changements. Cependant, n’est-il pas étrange de mettre en œuvre INotifyPropertyChanged dans les deux classes?

Merci beaucoup!

Réponses:

7 pour la réponse № 1

De l'un de vos commentaires:

il me semble bizarre que le modèle implémente INotifyPropertyChanged, ce qui me semble être une classe liée à l'interface utilisateur

Les notifications de modification sont utilisées dans toutes sortes de contextes, mais pas dans les contextes d'interface utilisateur. Par exemple, vous pouvez attacher un morceau de code de diagnostic qui enregistre les modifications TextWriter. Ceci est facilement accompli sans modification de l'objet de modèle sous-jacent si l'objet implémente la notification de modification.

Mais même dans une application où il ne s’agit que deutilisé pour mettre à jour l'interface utilisateur, ce modèle a toujours un sens. Étant donné que la notification de modification est gérée via un événement, l'objet qui déclenche l'événement est découplé de l'objet qui le gère. Votre modèle ne sait pas et n'a pas besoin de savoir quel type d'interface utilisateur l'utilise. C’est juste dire: "En supposant qu’il ya une interface utilisateur, je dois lui dire, quelle qu’elle soit, que la valeur de cette propriété vient de changer."

Alors pourquoi y a-t-il un modèle de vue? Pourquoi ne pas simplement se lier directement au modèle? En fait, vous pouvez juste lier directement au modèle s'il implémentemodifier la notification. Dans de nombreuses applications WPF simples, il n'est pas "nécessaire d'avoir un modèle de vue séparé - vous pouvez simplement implémenter la notification de modification dans le modèle et l'appeler un jour. C'est le moment idéal pour dissocier l'interface utilisateur de la logique métier sous-jacente et vous commencez à vous demander si vous «violez ou non le principe de responsabilité unique selon lequel la nécessité d’un modèle de vue se pose.


19 pour la réponse № 2

Le modèle implémente votre logique d'entreprise. Le modèle de vue décore votre logique d’entreprise dans le but de l’afficher et de l’interagir avec elle, dans une vue (interface utilisateur de quelque forme que ce soit, par exemple web, winform, CLI). Donc, non, je ne dirais pas que votre modèle devrait implémenter INotifyPropertyChanged à moins que cela ne fasse partie de votre logique métier fondamentale.


5 pour la réponse № 3

Dans certains cas, un modèle doit implémenter INotifyPropertyChanged. Imaginez que vous codiez le client pour ICQ ou quelque chose comme ça. Comment le ViewModel est-il censé savoir que quelqu'un vous envoie un message?

Différence entre Model et ViewModel:

Un ViewModel simplifie uniquement la sortie d'un modèle. Si le modèle est très simple, un ViewModel n’est pas nécessaire.