web-dev-qa-db-fra.com

Quel framework pour MVVM devrais-je utiliser?

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 sont:

  • Boîte à outils MVVM
  • MVVM Foundation
  • Cadre d'application WPF (WAF)
  • MVVM léger
  • Caliburn
  • Sangler
  • Prisme
  • RéactifUI

D'après votre expérience, lequel est le meilleur?

230
Rangel

Cela dépend vraiment de ce que vous essayez d’atteindre, du nombre d’infrastructures que vous souhaitez mettre en place et de la facilité avec laquelle vous pouvez trouver des exemples qui vous aideront. Je vais faire part de mon intérêt ici, car j’ai activement participé à au moins un framework MVVM, et j’ai eu une contribution dans d’autres par le biais du groupe Disciples de WPF, je suis donc un peu partial. En disant cela, voici:

Microsofts MVVM Toolkit - Cela en est encore beaucoup aux étapes alpha. Lors de sa sortie initiale, les Disciples ont été un peu féroces à cause de ce qu’ils n’ont pas fait. Cela dit, MS cherche à renforcer ce cadre, il est donc à surveiller - il n’est pas encore prêt.

MVVM Foundation - ah la version du framework de Josh Smith. Josh est l’un des pères du MVVM et a été un ardent défenseur et un enseignant du modèle. En conséquence, les empreintes digitales de Josh sont en grande partie présentes dans d'autres frameworks. Ce cadre est destiné à fournir les bases du MVVM et non à résoudre certains des problèmes les plus ésotériques. À l’origine, cela n’était destiné qu’à WPF, mais des personnes telles que Laurent Bugnion et moi-même avons ajouté des fonctionnalités/projets qui impliquent que ce soit également un cadre compatible Silverlight.

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

MVVM Light - Laurent Bugnion le reprend et vient de passer à la version 2. Il s'agit d'un très bon framework, mais là encore, il n'est pas destiné à couvrir tous les aspects des applications MVVM. Étant donné les antécédents de Laurent, il est très fortement supporté par Silverlight et Blendability.

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

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

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

Ocean - Karl Shifflett, responsable de programme de l’équipe Cider, a récemment publié un cadre complet pour MVVM MVVM. Encore une fois, c'est un excellent cadre et il y a beaucoup de choses à le recommander.

En bout de ligne, téléchargez les différents cadres, examinez-les et déterminez celui qui correspond le plus intuitivement à votre façon de penser et à vos exigences. Si vous pensez que vous souhaiterez peut-être prendre en charge Silverlight à partir de la même base de code, les frameworks WPF uniquement doivent être actualisés.

194
Pete OHanlon

J'ai trouvé cet article très utile http://www.japf.fr/2009/10/a-quick-tour-of-existing-mvvm-frameworks/ afin que j'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’UI aux gestionnaires de ViewModel

• Les tests unitaires sont fournis avec le cadre

Cinch

• Auteur: Sacha Barber

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

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

• Hébergement: CodePlex

• Licence: Licence Code Project Open

• Caractéristiques:

  1. comportements attachés

  2. validation à l'aide de IDataErrorInfo

  3. support pour IEditableObject

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

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

  6. Soutien CIO/DI (avec Unity)

  7. services: enregistreur d'événements, boîte de message, dialogue de sauvegarde ouvert, popup

  8. aides de filetage

  9. support pour les éléments de menu

  10. modèles de vue fermables

  11. Générateur de code MVVM

MVVM Light Toolkit

• Auteur: Laurent Bugnion

• support Silverlight: oui

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

• Hébergement: CodePlex

• Licence: MIT licence

• Caractéristiques:

  1. Installateur MSI

  2. Modèle de projet et d'élément VS

  3. Extraits de code VS

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

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

MVVM Helpers

• Auteur: Mark Smith

• support Silverlight: non

• Documentation: quelques articles sur le blog de Mark

• Hébergement: site personnel

• Licence: non définie

• Caractéristiques:

  1. comportements attachés

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

  3. validation basée sur les attributs

  4. CIO/DI utilisant l'approche ServiceProvider

  5. modèle de vue fermable

  6. attendez le curseur (en utilisant new WaitCursor () {// votre code ici})

MVVM Foundation

• Auteur: Josh Smith

• support Silverlight: non

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

• Hébergement: CodePlex

• Licence: MS-PL

• Caractéristiques:

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

  2. Moniteur d'événements PropertyChanged

Caliburn

• Auteur: Rob Eisenberg

• support Silverlight: oui

• Documentation: documentation en ligne complète disponible

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

• Licence: MIT licence

• Caractéristiques:

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

  2. des présentateurs qui traitent des 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 de 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. conteneur d'injection de dépendance

Onyx

• Auteur: William e Kempf

• support Silverlight: non

• Documentation: introduction de base disponible sur CodePlex

• Hébergement: CodePlex

• Licence: non spécifiée

• Caractéristiques:

  1. Motif 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

• support Silverlight: non

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

• Hébergement: CodePlex

• Licence: utiliser, copier, modifier et/ou distribuer et conserver le droit d'auteur!

• Caractéristiques:

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

  2. services de messagerie pour interagir avec l'utilisateur depuis le client ou le serveur en utilisant la même API

  3. Service de commande pour associer les ICommandes WPF à des interfaces de contenu qui ne deviennent actives que lorsqu'une vue ou un modèle 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 immédiatement

  6. Inclut des modules, tels qu'un navigateur Web, un éditeur de texte, une fenêtre de sortie, etc.

  7. Interface à onglets avec indication de fichier modifié (réutilisable sur plusieurs modules)

nRoute

• Auteur: Rishi

• support Silverlight: oui

• Documentation: 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. soutenir les modèles de comportements et de déclencheurs de Blend3

  2. cadre de localisation de ressources

  3. voir les services: OpenFileDialog, ShowMessage…

  4. utilise des attributs pour mapper View et ViewModel ensemble

Nito MVVM

• Auteur: Shammah

• support Silverlight: non

• Documentation: non

• Hébergement: CodePlex

• Licence: non spécifiée

• Caractéristiques:

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

Océan

• Auteur: Karl Shifflet

• support Silverlight: non

• Documentation: articles disponibles sur le blog de Karl

• Hébergement: site personnel

• Licence: non spécifiée

• Caractéristiques:

  1. écrit en VB.Net

  2. validation par attribut

  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

• support 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 les machines virtuelles

  3. traitement des événements en tant que commandes avec comportements attachés

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

  5. Extraits de code VS

GoodLight

• 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 des "espaces de travail" (ensemble de documents pouvant être fermés)

  2. soutien de la peau

  3. messagerie entre les machines virtuelles

54
Nasser Hadjloo

J'essaie de décrire les cadres manquants dans la réponse géniale 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 retours pour son Toolkit, il est possible qu’ils l’implémentent en tant que nouveau modèle de projet Visual Studio (peut-être 2010).

Prism (Microsoft p & p) est un framework qui fournit davantage 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 devez simplement 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 framework léger qui vous aide à créer des applications WPF avec MVVM. C’est juste pour WPF et ne supporte donc pas Silverlight. Cela va un peu plus loin que la plupart des autres frameworks MVVM avec l'introduction de Controllers . Ils sont responsables du flux de travail de l'application et assurent la médiation entre différents ViewModels.

44
jbe

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 propre VM qui implémente INotify), puis de partir de là.

19
Pierreten

Regardez aussi:

Caliburn & Onyx !

16
rudigrobler

Mélangez le vôtre!

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

Je ne recommanderais pas un seul cadre en soi.

10
Andrei Rînea

mon pari sera sur Caliburn et MVVMlight, il semble que peu de ces frameworks MVVM prennent en charge Silverlight. Je peux prévoir qu'il y aura plus de frameworks MVVM à choisir que les frameworks IoC, car il est plus difficile de configurer la limite de fonctionnalité au framework mvvm. Je suppose que le meilleur moyen de déterminer lequel convient le mieux à votre projet consiste à répertorier/comparer leurs fonctionnalités.

Consultez également Mix10. J'apprends beaucoup de la conversation: la construction de votre framework mvvm.

8
MCSean

Egalement Cocktail et framework DevForce de Ideablade

6
ramon22

J'utilise Prism et j'aime ça. Une des choses les plus importantes 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 maîtrisez les bases, vous avez besoin de nombreuses extensions pour votre application. C’est bien plus facile lorsque vous utilisez le même cadre que d’autres.

4
dave

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 à partir d’une fonction de délégué à lancer dans Execute. Je pense que je pourrais passer à n'importe quel autre cadre ou à aucun autre dans quelques heures.

2
mico

Un autre à considérer est MEFedMVVM . Je l'ai utilisé sur quelques projets. Léger, non intrusif, il 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.

2
John Rayner

Si vous recherchez une extensibilité (possibilité d'écrire des compléments) en plus d'un framework d'application WPF/MVVM, alors vous serez peut-être intéressé par SoapBox Core disclaimer: je l'ai écrit . Il est open source, donc même si vous ne l'utilisez pas, il pourrait contenir de bonnes idées. Il utilise MEF pour l'extensibilité et l'IoC.

1
Scott Whitlock

Il y a aussi nRoute

Un framework d'application vraiment sympa pour WPF/Silverlight qui supporte MVVM

1
Daniel O