Quelqu'un dans Silverlight posted qui MVVM manque actuellement de normalisation afin que tout le monde a sa propre saveur ..MVVM normalisation
Voilà pourquoi moi et quelques gars de WPF disciples discutent activement les éléments de MVVM que tout le monde d'accord. Je comprends parfaitement que nous avons implémenté le pattern de différentes manières et nous avons mixé les différents motifs ou créé notre propre pattern en fonction des besoins de notre projet ou pour faciliter la vie des développeurs. Mais oubliez ces difficultés ou le besoin particulier de votre projet . Discutons des règles standard du modèle MVVM que tout le monde a accepté. J'ai également posté some of my thoughts here.
Pourquoi MVVM?
- Testabiltiy (ViewModel est plus facile de test unitaire que le code-behind ou d'un événement de code entraîné)
- de seperation claire entre concepteur UX et développeur
- Augmente la « blendability » de votre vue
- Modèle jamais a besoin d'être changé pour appuyer les changements à la vue
- ViewModel a rarement besoin d'être changé pour appuyer les changements à la vue
- Aucun code dupliquée pour mettre à jour des vues
Do et Do pas Voir
- ne doit pas contenir toute logique que vous voulez tester: Comme Glenn dit que MVVM est pas l'exercice à compter de code, nous pouvons écrire le code dans le code -derrière. Mais vous ne devriez jamais écrire de logique que vous voulez tester. Par exemple: Si vous sélectionnez un pays, vous voulez afficher la liste des états ou des villes dans votre vue. C'est l'exigence de l'entreprise, donc vous devriez avoir un test unitaire pour tester cette logique. Donc, vous ne devriez pas l'écrire en code-behind.
- peut être un contrôle ou un modèle de données
- Gardez la vue aussi simple que possible. : Nous pouvons toujours utiliser Data Trigger ou Value Converter ou Visual State ou Blend Behivor dans XAML avec soin.
- utilisation propriété jointe si quelque chose ne peut être liée:
Do et Do pas ViewModel
- Connecteur entre Voir et modèle
- Conserver l'état d'affichage, la valeur de conversion (Vous pouvez Créez la structure de données que vous souhaitez afficher dans ViewModel au lieu d'utiliser ValueConverter Par exemple: Vous devez afficher le nom au lieu du prénom et du nom Votre modèle peut avoir le prénom et le nom mais vous pouvez créer la propriété Name dans ViewModel.)
- Aucune référence forte ou faible (via l'interface) de vue
- Faire VM testable que possible (par exemple, pas d'appel à la classe Singleton)
- Aucun contrôle lié enfouissent VM (Parce que si vous changez la vue alors vous devrez également changer de VM.)
Modèle
- peut être modèle de données, DTO, POCO, proxy généré automatiquement de la classe de domaine et l'interface utilisateur modèle basé sur la façon dont vous voulez avoir la séparation entre les services de domaine et la couche Présentation
- Aucune référence à ViewModel
avez-vous des suggestions ou des commentaires à ce sujet?
Nous avons un désaccord dans notre groupe. Certains ont dit que c'est bien d'avoir l'interface de View dans ViewModel. Mais certains ont dit que si View Model a l'interface de View alors ce sera MVP pattern.
L'un de nos experts MVVM disent MVVM Vs MVP
View => ViewModel
- MVVM la vue est directement lié à la ViewModel et parle à la machine virtuelle par liaison de données
- En MVP, la vue est liée à un modèle suspendu au SupervisionController ou non lié (vue passive).
ViewModel => Voir
MVVM
- INPC/propriété de liaison
- Events
- Messages (cadre de l'événement Aggregator/Messenger/RX)
- par un intermédiaire comme un service
- Par le biais d'une interface
- Par l'intermédiaire des délégués (la vue transfère les délégués à la machine virtuelle qu'elle peut utiliser pour la rappeler. Par exemple, VM peut exposer une méthode SetActions que la vue appelle en lui transmettant des délégués.
MVP
Dans le cas MVP la norme est les pourparlers de présentateur revenir à la vue, soit par une interface, databinding, ou par des propriétés dans le cas de vue passif. Avec Passive View, les propriétés n'utilisent pas la liaison de données, mais les getters et setters de propriété de vue sont utilisés pour définir directement la valeur du contrôle.
Que pensez-vous de cette idée?
Pensez-vous que ViewModel a l'interface de View?
Si vous souhaitez ajouter plus vous êtes invités à ajouter ... :)
L'idée sur ce poste est d'obtenir la même compréhension du modèle MVVM dans la Communauté.
Je pense que cette question devrait être un Wiki communautaire. – chakrit
bien sûr .. comment déplacer cette question au Wiki communautaire? Désolé pour ça .. Quelqu'un peut-il m'aider à le déplacer? ou S'il vous plaît laissez-moi savoir la façon de le déplacer. Merci. –
Je pense que c'est trop un argument pour vivre même comme cwiki, mais nous verrons ce que les autres pensent. – bmargulies