237 votes

Quel cadre pour MVVM dois-je utiliser ?

Je suis en train de développer une application avec le modèle MVVM, mais j'ai atteint un point où je dois choisir le cadre à utiliser.

Parmi les options possibles, citons :

  • Boîte à outils MVVM
  • Fondation MVVM
  • Cadre d'application WPF (WAF)
  • MVVM léger
  • Caliburn
  • Cinch
  • Prisme
  • ReactiveUI

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

14 votes

+1 - Bonne question, mais veuillez préciser "mieux". Les différents frameworks offrent différents avantages, le meilleur dépend de vos besoins. J'attends avec impatience les réponses :)

0 votes

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

2 votes

Vous pourriez aussi vouloir vérifier Caliburn. codeplex.com/caliburn

196voto

Pete OHanlon Points 7234

Cela dépend vraiment de ce que vous essayez de réaliser, de l'infrastructure que vous voulez déjà mettre en place et de la facilité avec laquelle vous pouvez trouver des échantillons qui vous aident. Je vais déclarer un intérêt ici, parce que j'ai été activement impliqué dans au moins un framework MVVM, et j'ai contribué à d'autres à travers le groupe WPF Disciples, donc je suis un peu partial. Ceci étant dit, voici ce que j'en pense :

Microsofts Boîte à outils MVVM - ce projet est encore en phase alpha. Lors de sa sortie initiale, il a été quelque peu critiqué par les Disciples en raison de ce qu'il ne faisait pas. Cela dit, MS cherche à étoffer ce framework, qui est donc à surveiller - il n'est tout simplement pas encore prêt.

Fondation MVVM - ah la version du cadre de Josh Smith. Josh est l'un des pères de MVVM, et a été un grand défenseur et professeur de ce modèle. Par conséquent, une grande partie de ce que vous trouverez dans les autres frameworks porte les empreintes de Josh. Ce framework a pour but de fournir les bases de MVVM, et non d'aborder certaines questions plus ésotériques. À l'origine, il était destiné uniquement à WPF, mais des personnes telles que Laurent Bugnion et moi-même avons ajouté des fonctionnalités/projets qui signifient que ce framework sera également compatible avec Silverlight.

WAF - Je n'ai pas d'expérience en la matière, donc je ne peux pas faire de commentaires à ce sujet, j'en ai peur.

MVVM Light - La version de Laurent Bugnion, qui vient d'être mise à jour en 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 de l'expérience de Laurent, il offre un support très solide pour Silverlight et Blendability.

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

Cinch - L'excellent framework MVVM de Sacha Barber pour WPF uniquement. Il couvre plus de terrain que les frameworks dont j'ai parlé ci-dessus. Il s'agit d'un excellent framework, qui tire parti des concepts abordés dans l'excellent ouvrage de Bill Kempf, intitulé Onyx projet. Onyx est destiné à compléter les cadres MVVM, et ajoute des fonctionnalités qui sont généralement difficiles à réaliser en MVVM/WPF. Encore une fois, initialement prévu pour être uniquement WPF, Onyx a progressé pour inclure la compatibilité SL - un 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 à son sujet.

Océan - Karl Shifflett, responsable de programme au sein de l'équipe Cider, a récemment publié un framework MVVM WPF complet. Encore une fois, il s'agit d'un excellent framework qui a beaucoup à offrir.

En résumé, 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 besoins. Si vous pensez vouloir prendre en charge Silverlight à partir de la même base de code, les frameworks WPF uniquement sont à écarter.

4 votes

J'en utilise un que nous avons écrit, car nous avons des besoins très spécifiques en matière de MVVM. Il est fortement influencé par le travail de Josh, et je le publierai sous forme de logiciel libre dans un avenir proche (je suis occupé à arracher les parties propriétaires). Il s'appelle Goldlight.

0 votes

En plus de cela, quel est votre cadre de couche d'accès aux données ? les gars LINQ, LLBLGen, EF, nHibernate ?

0 votes

Cela dépend du projet et des exigences. Nous utilisons parfois LINQ, parfois NHibernate, parfois Castle ActiveRecord, et parfois eXpress Persistent Objects.

55voto

Nasser Hadjloo Points 4781

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 prochains utilisateurs

Je mets à jour la section Cinch et ajoute le support de 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)

- Classe similaire à RelayCommand pour lier les commandes de l'interface utilisateur aux gestionnaires du ViewModel.

- Les tests unitaires sont fournis avec le cadre

Cinch

- Auteur : Sacha Barber

- Support de Silverlight : non (Cinch version 2 supporte 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 de IDataErrorInfo

  3. support pour IEditableObject

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

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

  6. Soutien aux CIO/DI (en utilisant Unity)

  7. services : journal d'événements, boîte de messages, dialogue d'enregistrement ouvert, popup

  8. aides à l'enfilage

  9. support pour les éléments de menu

  10. modèles de vues rapprochées

  11. Générateur de code MVVM

MVVM Light Toolkit

- Auteur : Laurent Bugnion

- Prise en charge de 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. Installation MSI

  2. Modèle de projet et d'article VS

  3. Extraits de code VS

  4. Système de messagerie pour la communication entre modèles de vues

  5. Traiter les événements comme des commandes

Aides MVVM

- Auteur : Mark Smith

- Support 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 d'une extension de balisage

  3. validation basée sur les attributs

  4. IOC/DI utilisant l'approche ServiceProvider

  5. modèle de vue fermable

  6. curseur d'attente (using new WaitCursor() { // votre code ici })

Fondation MVVM

- Auteur : Josh Smith

- Support 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 de messagerie pour la communication entre modèles de vues

  2. Surveillance de l'événement PropertyChanged

Caliburn

- Auteur : Rob Eisenberg

- Prise en charge de Silverlight : oui

- Documentation : documentation complète en ligne disponible

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

- Licence : Licence MIT

- Caractéristiques :

  1. sont construites sur la base des actions et partagent donc un grand nombre de leurs caractéristiques, notamment les paramètres d'entrée multiples, les filtres et l'exécution asynchrone automatique.

  2. des présentateurs qui traitent les questions relatives au cycle de vie de l'interface utilisateur, telles 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. supporte divers modèles d'interface utilisateur (pas seulement MVVM)

  6. conteneur d'injection de dépendances

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. Modèle ServiceLocator

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

  3. les 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 (partie1 et partie2)

- Hébergement : CodePlex

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

- Caractéristiques :

  1. Gestionnaire de modules pour activer ou désactiver des modules au moment de l'exécution.

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

  3. Service de commande permettant d'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 dès le départ

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

  7. Interface à onglets avec indication du fichier sale (réutilisable entre les modules)

nRoute

- Auteur : Rishi

- Prise en charge de 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. soutenir les modèles de comportements et de déclencheurs de Blend3

  2. cadre du localisateur de ressources

  3. voir les services : OpenFileDialog, ShowMessage

  4. utilise des attributs pour mettre en correspondance View et ViewModel

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 web personnel

- Licence : non spécifiée

- 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

Cadre 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. la messagerie entre VM's

  3. traiter les événements comme des commandes avec des comportements associés

  4. gérer les dialogues (et plus encore) 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 de l'"espace de travail" (ensemble de documents pouvant être fermés)

  2. soutien de la peau

  3. la messagerie entre VM's

0 votes

Superbe poste. J'ai juste pensé que je devais ajouter que Cinch version 2 supporte Silverlight.

46voto

jbe Points 4629

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 devrait aider les débutants avec ce modèle. Si Microsoft reçoit de bons retours sur sa boîte à outils, elle pourrait l'implémenter en tant que nouveau modèle de projet Visual Studio (peut-être 2010).

Prism (Microsoft p&p) est un cadre qui fournit plus que le support du modèle MVVM. L'objectif principal de ce projet est de vous aider à construire modulaire Applications WPF et/ou Silverlight. Si vous avez juste besoin de mettre en œuvre le modèle MVVM ou si vous êtes un débutant en .NET/WPF, je ne recommanderai pas ce projet. Voir aussi : Lien .

Cadre d'application WPF (WAF) est un cadre léger qui vous aide à créer des applications WPF avec MVVM. Il est uniquement destiné à WPF et ne prend donc pas en charge Silverlight. Il va un peu différemment de la plupart des autres frameworks MVVM avec l'introduction de Contrôleurs . Ils sont responsables du flux de travail de l'application et assurent la médiation entre les différents ViewModels.

19voto

Pierreten Points 3583

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

4 votes

Il y a une raison pour laquelle beaucoup de développeurs ont développé la bibliothèque mvvm. Si ce que vous dites est vrai, alors pourquoi ces développeurs perdent-ils leur temps ? Pourquoi les utilisateurs de ces frameworks continueraient-ils à utiliser leur framework mvvm préféré ? C'est vrai, "Mvvm ne nécessite pas vraiment un framework entier pour supporter IMO". Mais il n'est pas pratique de se passer du framework MVVM.

3 votes

1 IMO : écrire votre propre classe RelayCommand pour les commandes IC, une classe Messenger pour la communication inter-VM et votre propre conteneur IoC, pour ne mentionner que les outils les plus élémentaires nécessaires au bon fonctionnement d'une application WPF, est un véritable casse-tête. Votre réponse n'est valable que pour les programmes les plus simples.

17voto

rudigrobler Points 8883

Regardez aussi :

Caliburn & Onyx !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X