Question

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

Parmi les options possibles:

  • MVVM Toolkit
  • MVVM Foundation
  • Cadre d'application WPF (WAF)
  • Light MVVM
  • Caliburn
  • Cinch
  • Prism

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

Était-ce utile?

La solution

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

Microsofts MVVM Toolkit - c'est encore beaucoup dans les é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.

Fondation MVVM - version ah de Josh Smith du cadre. 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 qu’il s’agisse également d’un framework compatible Silverlight.

WAF - aucune expérience, donc je ne peux pas en parler, je crains fort.

MVVM Léger - Laurent Bugnion en parle et vient de mettre à jour 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, Silverlight et Blendability sont très largement supportés.

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 pour WPF uniquement 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 conçu pour ê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.

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

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 que vous souhaitez peut-être prendre en charge Silverlight à partir de la même base de code, vous devez alors ne pas utiliser les frameworks WPF.

Autres conseils

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

Mise à jour de la section Cinch et ajout du support silverlight à ses fonctionnalités

Je suis désolé pour la longue histoire

Caractéristiques communes:

  

& # 8226; Classe ViewModelBase (pour la mise en oeuvre de l'interface INotifyPropertyChanged)

     

& # 8226; RelayCommand comme une classe pour relier la commande d’UI aux gestionnaires de ViewModel

.

     

& # 8226; Les tests unitaires sont livrés avec le framework

Accrochez

  

& # 8226; Auteur: Sacha Barber

     

& # 8226; Prise en charge de Silverlight: non (Cinch version 2 prend en charge Silverlight)

     

& # 8226; Documentation: excellente, 6 articles publiés sur CodeProject

     

& # 8226; Hébergement: CodePlex

     

& # 8226; Licence: Licence Code Project Open

     

& # 8226; Caractéristiques:

     
      
  1. comportements attachés

  2.   
  3. validation à l'aide de IDataErrorInfo

  4.   
  5. prise en charge d'IEditableObject

  6.   
  7. création et abonnement d'événements faibles

  8.   
  9. messagerie du médiateur utilisant des événements faibles

  10.   
  11. Soutien CIO / ID (avec Unity)

  12.   
  13. services: enregistreur d'événements, boîte de message, boîte de dialogue Ouvrir une sauvegarde, popup

  14.   
  15. assistants de filetage

  16.   
  17. prise en charge des éléments de menu

  18.   
  19. modèles de vue pouvant être fermés

  20.   
  21. Générateur de code MVVM

  22.   

Boîte à outils MVVM Light

  

& # 8226; Auteur: Laurent Bugnion

     

& # 8226; Prise en charge de Silverlight: oui

     

& # 8226; Documentation: nombreux articles disponibles sur le blog de Laurent + d'autres développeurs également

     

& # 8226; Hébergement: CodePlex

     

& # 8226; Licence: licence MIT

     

& # 8226; Caractéristiques:

     
      
  1. Programme d'installation MSI

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

  4.   
  5. Extraits de code VS

  6.   
  7. Système Messenger pour la communication entre modèles de vues

  8.   
  9. Gestion des événements en tant que commandes

  10.   

Assistants MVVM

  

& # 8226; Auteur: Mark Smith

     

& # 8226; Prise en charge de Silverlight: non

     

& # 8226; Documentation: quelques articles sur le blog de Mark

     

& # 8226; Hébergement: site personnel

     

& # 8226; Licence: non définie

     

& # 8226; Caractéristiques:

     
      
  1. comportements attachés

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

  4.   
  5. validation basée sur les attributs

  6.   
  7. CIO / ID utilisant l'approche ServiceProvider

  8.   
  9. modèle de vue pouvant être fermé

  10.   
  11. wait Curseur (en utilisant un nouveau WaitCursor () {// votre code ici})

  12.   

MVVM Foundation

  

& # 8226; Auteur: Josh Smith

     

& # 8226; Prise en charge de Silverlight: non

     

& # 8226; Documentation: articles sur l'implémentation de Messenger sur le blog de Josh ou Marlon Grech

     

& # 8226; Hébergement: CodePlex

     

& # 8226; Licence: MS-PL

     

& # 8226; Caractéristiques:

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

  2.   
  3. Moniteur d'événements PropertyChanged

  4.   

Caliburn

  

& # 8226; Auteur: Rob Eisenberg

     

& # 8226; Prise en charge de Silverlight: oui

     

& # 8226; Documentation: documentation en ligne complète disponible

     

& # 8226; Hébergement: CodePlex http://www.codeplex.com/caliburn

     

& # 8226; Licence: licence MIT

     

& # 8226; Caractéristiques:

     
      Les
  1. commandes sont construites au-dessus d’Actions et partagent par conséquent bon nombre des mêmes fonctionnalités, notamment de multiples paramètres d’entrée, des filtres et une exécution asynchrone automatique

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

  4.   
  5. Les applications Caliburn sont entièrement testables

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

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

  10.   
  11. conteneur d'injection de dépendance

  12.   

Onyx

  

& # 8226; Auteur: William e Kempf

     

& # 8226; Prise en charge de Silverlight: non

     

& # 8226; Documentation: introduction de base disponible sur CodePlex

     

& # 8226; Hébergement: CodePlex

     

& # 8226; Licence: non spécifiée

     

& # 8226; Caractéristiques:

     
      
  1. Modèle ServiceLocator

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

  4.   
  5. Services associés à l'interface utilisateur tels que IDisplayMessage

  6.   

Calcium

  

& # 8226; Auteur: Daniel Vaughan

     

& # 8226; Prise en charge de Silverlight: non

     

& # 8226; Documentation: 2 articles très détaillés sur CodeProject (part1 et part2)

     

& # 8226; Hébergement: CodePlex

     

& # 8226; Licence: utiliser, copier, modifier et / ou distribuer et conserver le droit d'auteur!

     

& # 8226; Caractéristiques:

     
      
  1. Module Manager pour activer ou désactiver les modules à l'exécution

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

  4.   
  5. 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

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

  8.   
  9. La journalisation client-serveur est prête à fonctionner immédiatement

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

  12.   
  13. Interface à onglets avec indication de fichier modifié (réutilisable dans tous les modules)

  14.   

nRoute

  

& # 8226; Auteur: Rishi

     

& # 8226; Prise en charge de Silverlight: oui

     

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

     

& # 8226; Hébergement: CodePlex

     

& # 8226; Licence: MS-PL

     

& # 8226; Caractéristiques:

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

  2.   
  3. infrastructure de localisation de ressources

  4.   
  5. voir les services: OpenFileDialog, ShowMessage & # 8230;

  6.   
  7. utilise des attributs pour mapper View et ViewModel ensemble

  8.   

MVM Nito

  

& # 8226; Auteur: Shammah

     

& # 8226; Prise en charge de Silverlight: non

     

& # 8226; Documentation: non

     

& # 8226; Hébergement: CodePlex

     

& # 8226; Licence: non spécifiée

     

& # 8226; Caractéristiques:

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

Océan

  

& # 8226; Auteur: Karl Shifflet

     

& # 8226; Prise en charge de Silverlight: non

     

& # 8226; Documentation: articles disponibles sur le blog de Karl

     

& # 8226; Hébergement: site personnel

     

& # 8226; Licence: non spécifiée

     

& # 8226; Caractéristiques:

     
      
  1. écrit en VB.Net

  2.   
  3. validation par attribut

  4.   
  5. Classes de base viewmodel: commande de relais, closableviewmodel & # 8230;

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

  8.   

Infrastructure MVVM de base

  

& # 8226; Auteur: Lester Lobo

     

& # 8226; Prise en charge de Silverlight: non

     

& # 8226; Documentation: exemple d'application disponible avec la bibliothèque

     

& # 8226; Hébergement: CodePlex

     

& # 8226; Licence: MS-PL

     

& # 8226; Caractéristiques:

     
      
  1. délégation des commandes \ reliure

  2.   
  3. messagerie entre les ordinateurs virtuels

  4.   
  5. gestion des événements en tant que commandes avec des comportements attachés

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

  8.   
  9. Extraits de code VS

  10.   

GoodLight

  

& # 8226; Auteur: Peter O & # 8217; Hanlon & # 8226; Support Silverlight: oui

     

& # 8226; Documentation: exemple d'application disponible avec la bibliothèque

     

& # 8226; Hébergement: CodePlex

     

& # 8226; Licence: MS-PL

     

& # 8226; Caractéristiques:

     
      
  1. & # 8220; espace de travail & # 8221; gestion (ensemble de documents pouvant être fermés)

  2.   
  3. soutien de la peau

  4.   
  5. messagerie entre les ordinateurs virtuels

  6.   

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

MVVM Toolkit (Microsoft) a> 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 & amp; p) est un framework qui fournit plus d'informations. que la prise en charge du modèle MVVM. L'objectif principal de ce projet est de vous aider à créer 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 n'ai pas recommandé ce projet.  Voir aussi: Lien .

Le cadre d'application WPF (WAF) est un cadre léger qui vous aide à créer Applications WPF avec MVVM. C’est réservé à WPF et ne prend donc pas en charge Silverlight. Cela va un peu plus loin que 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 différents ViewModels.

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, puis de partir de là.

Regardez aussi:

Caliburn & amp; Onyx !

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.

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.

Découvrez également Mix10. J'apprends beaucoup de mon discours: construire votre framework mvvm.

Les cocktails et le framework DevForce de Lancement des idées

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 framework que les autres.

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.

Un autre élément à prendre en considération 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.

Si vous recherchez une extensibilité (possibilité d'écrire des compléments) en plus d'un framework d'application WPF / MVVM, alors vous pouvez ê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.

Il existe également des nRoute

.

Un très bon framework d’application pour WPF / Silverlight qui supporte MVVM

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top