Quel framework pour MVVM dois-je utiliser? [fermé]


233

Je développe une application avec le modèle MVVM, mais j'ai atteint un point où je dois choisir quel framework utiliser.

Parmi les options possibles figurent:

  • MVVM Toolkit
  • Fondation MVVM
  • Cadre d'application WPF (WAF)
  • MVVM léger
  • Caliburn
  • Sangler
  • Prisme
  • ReactiveUI

D'après votre expérience, quelle est la meilleure?


14
+1 - Bonne question, mais veuillez clarifier «mieux». Différents cadres offrent différents avantages, le meilleur dépend de vos besoins. Réjouissez-vous des réponses :)
Russell

Eh bien, ce serait très bien que vous puissiez utiliser avec WPF et Silverlight, et avec une courbe d'apprentissage minimale.
Rangel

2
Vous pouvez également consulter Caliburn. codeplex.com/caliburn
Kent Boogaart

Désolé Kent. Comment pourrais-je oublier Caliburn?
Pete OHanlon

2
Proche et vieux mais ... J'ai fait mon premier projet en utilisant Prism (réponse ci-dessous) car j'ai besoin du support des composants. Mon dernier projet que j'ai fait brut - pas de cadre du tout. Tout ce dont vous avez besoin est une classe de commandes et vous pouvez faire MVVM sans framework - c'est à peu près aussi léger que possible.
dave

Réponses:


194

Cela dépend vraiment de ce que vous essayez de réaliser et de la quantité d'infrastructure que vous souhaitez déjà en place, ainsi que de la facilité avec laquelle vous pouvez trouver des échantillons qui vous aideront. Je vais déclarer un intérêt ici, car j'ai été activement impliqué dans au moins un framework MVVM, et j'ai eu des commentaires sur d'autres via le groupe WPF Disciples, donc je suis un peu biaisé. Cela dit, voici:

Microsofts MVVM Toolkit - il est encore très en phase alpha. Quand il a été initialement publié, il a fallu un peu de sauvage aux Disciples à cause de ce qu'il n'a pas fait. Cela dit, MS cherche à renforcer ce cadre, il est donc à surveiller - il n'est tout simplement pas encore prêt.

MVVM Foundation - ah Josh Smith version du cadre. Josh est l'un des papas de MVVM, et a été un grand défenseur et enseignant du modèle. En conséquence, une grande partie de ce que vous trouverez dans d'autres cadres a les empreintes digitales de Josh partout. Ce cadre est destiné à fournir les bases de MVVM, et non à résoudre certains des problèmes les plus ésotériques. À l'origine, cela n'était destiné qu'à WPF, mais des gens tels que Laurent Bugnion et moi-même ont ajouté des fonctionnalités / projets qui signifient que ce sera également un cadre compatible Silverlight.

WAF - aucune expérience, donc je ne peux pas en parler, j'ai peur.

MVVM Light - la version de Laurent Bugnion et juste mise à jour vers la version 2. C'est un très bon framework, mais encore une fois il n'est pas destiné à couvrir tous les aspects des applications MVVM. Compte tenu des antécédents de Laurent, il dispose d'un support Silverlight et Blendability très solide.

Mise à jour Laurent vient de m'informer que les versions .NET 3.5 et .NET 4.0 sont compatibles avec les fonctionnalités. Wau aller Laurent.

Cinch - l'excellent framework MVVM de Sacha Barber uniquement MVF. Cela couvre plus de terrain que les cadres dont j'ai parlé ci-dessus. C'est un excellent cadre, et tire parti des concepts couverts dans l'excellent projet Onyx de Bill Kempf . Onyx est destiné à compléter les frameworks MVVM et ajoute des fonctionnalités généralement difficiles à réaliser dans MVVM / WPF. Encore une fois, initialement destiné à être uniquement WPF, Onyx a progressé pour inclure la compatibilité SL - travail auquel je suis particulièrement fier d'avoir participé.

Prisme - Encore une fois, je ne l'ai jamais utilisé, mais j'ai entendu beaucoup de bonnes choses à ce sujet.

Océan - Karl Shifflett, responsable de programme au sein de l'équipe Cider, a récemment publié un framework WPF MVVM complet. Encore une fois, c'est un excellent cadre et a beaucoup à recommander.

L'essentiel est de télécharger les différents cadres, de les consulter et de déterminer celui qui correspond le mieux à votre façon de penser et à vos besoins. Si vous pensez que vous souhaiterez peut-être prendre en charge Silverlight à partir de la même base de code, les cadres WPF uniquement doivent être actualisés.


4
J'utilise celui que nous avons écrit, car nous avons des besoins très spécialisés pour MVVM. Il est fortement influencé par le travail que Josh a fait, et je le publierai en Open Source dans un proche avenir (je suis en train de déchirer les morceaux propriétaires). Ça s'appelle Goldlight.
Pete OHanlon,

Parallèlement à cela, quel est votre cadre de couche d'accès aux données? les gars .. LINQ, LLBLGen, EF, nHibernate?
Jirapong

Cela dépend du projet et des exigences. Parfois, nous utilisons LINQ, parfois NHibernate, parfois Castle ActiveRecord et parfois eXpress Persistent Objects.
Pete OHanlon, le

3
Salut Pete, je veux juste dire que MVVM Light Toolkit fonctionne de la même manière pour WPF 3.5 et WPF 4 que pour Silverlight 3 et Silverlight 4. Je fais attention de garder les fonctionnalités synchronisées autant que possible. Vous avez raison quant à la possibilité de mélange cependant, c'est une préoccupation majeure pour moi :) Cheers, Laurent
LBugnion

1
J'ai été déçu que MVVM Toolkit n'ait pas été mis à jour pour fonctionner avec Visual Studio 2010. Je pourrais vouloir ajouter cela au processus de prise de décision. La plupart des gens que je connais utilisant des modèles MVVM en 2010 utilisent MVVM Light et certains ont migré vers cela pour cette seule raison.
ScottCher

54

J'ai trouvé cet article très utile http://www.japf.fr/2009/10/a-quick-tour-of-existing-mvvm-frameworks/ Pour que je l'apporte ici pour les utilisateurs à venir

Je mets à jour la section Cinch et ajoute le support silverlight à ses fonctionnalités

Je suis désolé pour la longue histoire

Caractéristiques communes:

• Classe ViewModelBase (pour l'implémentation de l'interface INotifyPropertyChanged)

• RelayCommand comme classe pour lier la commande d'interface utilisateur aux gestionnaires de ViewModel

• Les tests unitaires sont fournis avec le cadre

Sangler

• Auteur: Sacha Barber

• Prise en charge Silverlight: non (Cinch version 2 prend en charge Silverlight)

• Documentation: excellente, 6 articles publiés sur CodeProject

• Hébergement: CodePlex

• Licence: Code Project Open License

• Caractéristiques:

  1. comportements attachés

  2. validation à l'aide d'IDataErrorInfo

  3. prise en charge d'IEditableObject

  4. création et abonnement d'événements faibles

  5. messagerie de médiateur utilisant des événements faibles

  6. Prise en charge IOC / DI (en utilisant Unity)

  7. services: enregistreur d'événements, boîte de message, ouvrir la boîte de dialogue d'enregistrement, popup

  8. aides au filetage

  9. prise en charge des éléments de menu

  10. modèles de vue refermables

  11. Générateur de code MVVM

MVVM Light Toolkit

• Auteur: Laurent Bugnion

• Prise en charge Silverlight: oui

• Documentation: de nombreux articles disponibles sur le blog de Laurent + d'autres développeurs également

• Hébergement: CodePlex

• Licence: licence MIT

• Caractéristiques:

  1. Installateur MSI

  2. Projet VS et modèle d'élément

  3. Extraits de code VS

  4. Système Messenger pour la communication entre les modèles

  5. Gestion des événements en tant que commandes

Assistants MVVM

• Auteur: Mark Smith

• Prise en charge Silverlight: non

• Documentation: quelques articles sur le blog de Mark

• Hébergement: site web personnel

• Licence: non définie

• Caractéristiques:

  1. comportements attachés

  2. création d'un modèle de vue à l'aide de l'extension de balisage

  3. validation basée sur les attributs

  4. IOC / DI utilisant l'approche ServiceProvider

  5. modèle de vue refermable

  6. curseur d'attente (en utilisant le nouveau WaitCursor () {// votre code ici})

Fondation MVVM

• Auteur: Josh Smith

• Prise en charge Silverlight: non

• Documentation: articles sur l'implémentation de Messenger sur le blog de Josh ou Marlon Grech

• Hébergement: CodePlex

• Licence: MS-PL

• Caractéristiques:

  1. Système Messenger pour la communication entre les modèles

  2. Moniteur d'événements PropertyChanged

Caliburn

• Auteur: Rob Eisenberg

• Prise en charge Silverlight: oui

• Documentation: documentation complète en ligne disponible

• Hébergement: CodePlex http://www.codeplex.com/caliburn

• Licence: licence MIT

• Caractéristiques:

  1. les commandes sont construites au-dessus des actions et partagent ainsi plusieurs des mêmes fonctionnalités, y compris plusieurs paramètres d'entrée, des filtres et une exécution asynchrone automatique

  2. des présentateurs qui gèrent les problèmes de cycle de vie de l'interface utilisateur, tels que la gestion de la sémantique d'activation, de désactivation et d'arrêt pour divers composants de l'interface utilisateur

  3. Les applications Caliburn sont entièrement testables

  4. divers utilitaires tels qu'un gestionnaire de tâches en arrière-plan

  5. prend en charge divers modèles d'interface utilisateur (pas uniquement MVVM)

  6. récipient d'injection de dépendance

Onyx

• Auteur: William e Kempf

• Prise en charge Silverlight: non

• Documentation: introduction de base disponible sur CodePlex

• Hébergement: CodePlex

• Licence: non spécifié

• Caractéristiques:

  1. Modèle ServiceLocator

  2. Création de ViewModel à l'aide d'une extension de balisage personnalisée

  3. Services liés à l'interface utilisateur tels que IDisplayMessage

Calcium

• Auteur: Daniel Vaughan

• Prise en charge Silverlight: non

• Documentation: 2 articles très détaillés sur CodeProject (partie 1 et partie 2)

• Hébergement: CodePlex

• Licence: utilisez, copiez, modifiez et / ou distribuez et conservez les droits d'auteur!

• Caractéristiques:

  1. Module Manager pour l'activation ou la désactivation des modules lors de l'exécution

  2. services de messagerie pour interagir avec l'utilisateur à partir du client ou du serveur à l'aide de la même API

  3. Service de commande pour associer des ICommands WPF à des interfaces de contenu qui ne deviennent actives que lorsqu'une vue ou un modèle de vue actif implémente l'interface

  4. Adaptateurs de région pour les barres d'outils et les menus

  5. Journalisation client-serveur prête à fonctionner prête à l'emploi

  6. Comprend des modules, tels qu'un navigateur Web, un éditeur de texte, une fenêtre de sortie et bien d'autres

  7. Interface à onglets avec indication de fichier sale (réutilisable sur tous les modules)

nRoute

• Auteur: Rishi

• Prise en charge Silverlight: oui

• Documentation: de nombreux articles disponibles sur le blog de l'auteur (voir la page d'accueil du projet CodePlex pour les liens)

• Hébergement: CodePlex

• Licence: MS-PL

• Caractéristiques:

  1. prendre en charge les comportements Blend3 et les modèles de déclencheurs

  2. cadre de recherche de ressources

  3. afficher les services: OpenFileDialog, ShowMessage…

  4. utilise des attributs pour mapper View et ViewModel ensemble

Nito MVVM

• Auteur: Shammah

• Prise en charge Silverlight: non

• Documentation: non

• Hébergement: CodePlex

• Licence: non spécifié

• Caractéristiques:

  1. diverses implémentations conviviales MVVM de l'interface ICommand

Océan

• Auteur: Karl Shifflet

• Prise en charge Silverlight: non

• Documentation: articles disponibles sur le blog de Karl

• Hébergement: site web personnel

• Licence: non spécifié

• Caractéristiques:

  1. écrit en VB.Net

  2. validation basée sur les attributs

  3. classes de base de viewmodel: relaycommand, closeableviewmodel…

  4. Couche d'accès aux données du serveur SQL

Framework MVVM de base

• Auteur: Lester Lobo

• Prise en charge Silverlight: non

• Documentation: exemple d'application disponible avec la bibliothèque

• Hébergement: CodePlex

• Licence: MS-PL

• Caractéristiques:

  1. délégation de commandes \ Keybinding

  2. messagerie entre VM

  3. gestion des événements en tant que commandes avec des comportements associés

  4. gérer les dialogues (et plus) en tant que services

  5. Extraits de code VS

Bonne lumière

• Auteur: Peter O'Hanlon • Support Silverlight: oui

• Documentation: exemple d'application disponible avec la bibliothèque

• Hébergement: CodePlex

• Licence: MS-PL

• Caractéristiques:

  1. Gestion de «l'espace de travail» (ensemble de documents pouvant être fermés)

  2. soutien de la peau

  3. messagerie entre VM


Très bonne publication. Je pensais juste ajouter que la version 2 de Cinch supporte Silverlight.
Kildareflare

44

J'essaie de décrire les cadres manquants dans la grande réponse de Pete:

MVVM Toolkit (Microsoft) est une bibliothèque très légère avec des modèles de projet Visual Studio qui devraient prendre en charge les débutants avec ce modèle. Si Microsoft obtient de bons commentaires pour leur boîte à outils, ils pourraient l'implémenter comme un nouveau modèle de projet Visual Studio (peut-être 2010).

Prism (Microsoft p & p) est un framework qui fournit plus que la prise en charge du modèle MVVM. L'objectif principal de ce projet est de vous aider à construire des applications modulaires WPF et / ou Silverlight. Lorsque vous avez juste besoin d'implémenter le modèle MVVM ou que vous êtes un débutant en .NET / WPF, je ne recommanderai pas ce projet. Voir aussi: Lien .

WPF Application Framework (WAF) est un cadre léger qui vous aide à créer des applications WPF avec MVVM. C'est juste pour WPF et donc il ne prend pas en charge Silverlight. Cela va un peu plus loin que la plupart des autres frameworks MVVM avec l'introduction des contrôleurs . Ils sont responsables du flux de travail de l'application et assurent la médiation entre les différents ViewModels.


19

Meh. Mvvm n'a pas vraiment besoin d'un framework complet pour supporter IMO. Si vous comprenez le concept, il est assez simple de commencer avec une classe de base de machine virtuelle propre qui implémente INotify, et de continuer à partir de là.


4
Il y a une raison pour laquelle beaucoup de développeurs développent une bibliothèque mvvm. Si ce que vous dites est vrai, alors pourquoi ces développeurs perdraient-ils leur temps? Pourquoi ces frameworks utiliseraient-ils leur framework mvvm préféré? Certes, "Mvvm ne nécessite pas vraiment un framework complet pour supporter IMO". Mais ce n'est pas pratique de se passer du framework MVVM.
Syaiful Nizam Yahya

3
-1 IMO écrit votre propre classe RelayCommand pour ICommands, une classe Messenger pour la communication inter-VM et votre propre conteneur IoC pour ne mentionner que les outils les plus élémentaires requis pour une application WPF qui fonctionne bien, est un PITA majeur. Votre réponse n'est valable que pour les programmes les plus simples.
Heliac


10

Mélangez le vôtre!

J'ai utilisé EventAggregator de PRISM, avec ViewModelBase de MVVM Foundation et ainsi de suite. J'ai également modifié le RelayCommand (DelegateCommand appelé à certains endroits) pour accepter d'autres données aussi, et ainsi de suite.

Je ne recommanderais pas un seul cadre en soi.


19
Je suis en désaccord avec respect, le problème avec cette approche se révélera lorsque vous obtiendrez de nouveaux membres - le coût d'entrée sur le projet sera beaucoup plus élevé car les documents internes ne sont généralement pas la priorité.
Florian Doyon

1
Je peux voir le point sur la documentation.Mais il n'est peut-être pas nécessaire de développer des documents internes.Les liens vers les sites externes avec la documentation peuvent être intégrés dans le code lui
Vasudevan Kannan

8

mon pari sera sur Caliburn et MVVMlight, il semble que peu de ces frameworks mvvm supportent silverlight. Je peux prévoir qu'il y aura plus de frameworks MVVM parmi lesquels choisir que les frameworks IoC, car il est plus difficile de configurer la limite des fonctionnalités du framework mvvm. Je suppose que la meilleure façon de déterminer celle qui convient le mieux à votre projet sera de répertorier / comparer leurs fonctionnalités.

Consultez également Mix10. J'apprends beaucoup de la conférence: construire votre framework mvvm.


4
J'ai trouvé cet exposé très utile. Voici un lien direct: live.visitmix.com/MIX10/Sessions/EX15
anshul


4

J'utilise Prism et j'aime ça. L'une des grandes choses pour moi était qu'il y aurait d'autres personnes qui pourraient m'aider si nécessaire et de bons exemples. Une fois que vous avez exécuté les bases, il y a tout un tas d'extensions dont vous aurez besoin pour votre application et c'est tellement plus facile lorsque vous travaillez avec le même framework que les autres.


2

Dans l'ensemble, je suis à 90% dans mon application et tout ce que j'ai utilisé de MVVM Toolkit est la fonction d'usine qui crée une commande pour moi, étant donné une fonction de délégué à lancer dans Execute. Je pense que je pourrais passer à n'importe quel autre cadre ou à aucun cadre en quelques heures.


2

Un autre à considérer est MEFedMVVM . Je l'ai utilisé sur quelques projets et il est léger, non intrusif et prend en charge Silverlight et WPF. Il est également capable de prendre en charge les données de conception dans Blend, pour ceux qui utilisent ce produit.


1

Si vous recherchez l'extensibilité (la possibilité d'écrire des compléments) au-dessus d'un cadre d'application WPF / MVVM, alors vous pouvez être intéressé par la clause de non-responsabilité de SoapBox Core : je l'ai écrite . Il est open source, donc même si vous ne l'utilisez pas, il pourrait y avoir de bonnes idées pour vous. Il utilise MEF pour l'extensibilité et l'IoC.


1

Il y a aussi nRoute

Un cadre d'application vraiment sympa pour WPF / Silverlight qui prend en charge MVVM

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.